Dziwne zachowanie float
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Dziwne zachowanie float

AutorWiadomość
Temat założony przez niniejszego użytkownika
Dziwne zachowanie float
» 2014-06-01 14:59:44
Witam!
Jestem trochę początkujący, więc też mam dość spory problem, ponieważ chcąc napisać program, w którym obliczam miejsca zerowe w funkcji sześciennej moje zmienne po prostu nie działają. Oto kod:
C/C++
do
{ xl -= 0, 1;
    std::cout << xl;
    zeros =( a * xl * xl * xl + b * xl * xl + c * xl + d ) *( a *( xl - 0, 1 ) *( xl - 0, 1 ) *( xl - 0, 1 ) + b *( xl - 0, 1 ) *( xl - 0, 1 ) + c *( xl - 0, 1 ) + d );
    std::cout << zeros;
}
while( zeros > 0 && xl > - d2 );

Problem polega na tym, że według tego "xl" (wcześniej podałem tej zmiennej wartość 1) nie ulega zmianie, natomiast zmienna "zeros" wypisuje zamiast liczb słowa "inf". Obie zmienne oznaczone są jako float.

Dziękuję i pozdrawiam.

P-111252
» 2014-06-01 15:04:56
Ułamki pisze się z kropką, a nie przecinkiem.
P-111253
Temat założony przez niniejszego użytkownika
» 2014-06-01 15:09:01
Niezły błąd z mojej strony, jednak zmienna "zeros" nadal zamiast liczb wypisuje "inf"
P-111254
» 2014-06-01 15:14:27
Podaj kod.
P-111256
Temat założony przez niniejszego użytkownika
» 2014-06-01 15:20:02
C/C++
#include <iostream>
int main()
{
    float xl, xp, a, b, c, d, x1, x2, x3, liczba, d2, zeros;
    float y, wynik;
    liczba = 0;
    xl = 1;
    xp = 1;
    std::cout << "Wprowadz liczby a, b, c i d do rownania:\n0 = ax^3 + bx^2 + cx + d\n";
    std::cout << "a:";
    std::cin >> a;
    std::cout << "b:";
    std::cin >> b;
    std::cout << "c:";
    std::cin >> c;
    std::cout << "d:";
    std::cin >> d;
    std::cout << "0 = " << a << "x^3 + " << b << "x^2 + " << c << "x + " << d << std::endl;
    std::cout << "Obliczanie liczby x w przyblizeniu:\n";
    d = d2;
    d2 = 100 * d2;
    if( d2 < 0 )
    {
        d2 = - d2;
    }
    else
    {
        d2 = d2;
    }
    std::cout << "1";
    do
    { xl -= 0.1;
        std::cout << xl;
        zeros =( a * xl * xl * xl + b * xl * xl + c * xl + d ) *( a *( xl - 0.1 ) *( xl - 0.1 ) *( xl - 0.1 ) + b *( xl - 0.1 ) *( xl - 0.1 ) + c *( xl - 0.1 ) + d );
        std::cout << zeros;
    }
    while( zeros > 0 && xl > - d2 );
   
    if( zeros < 0 )
    { liczba = liczba + 1;
        std::cout << "2";
        do
        xl = xl - 0.1;
        while(( a * xl * xl * xl + b * xl * xl + c * xl + d ) *( a *( xl - 0.1 ) *( xl - 0.1 ) *( xl - 0.1 ) + b *( xl - 0.1 ) *( xl - 0.1 ) + c *( xl - 0.1 ) + d ) > 0 && xl > - d2 );
       
        if(( a * xl * xl * xl + b * xl * xl + c * xl + d ) *( a *( xl - 0.1 ) *( xl - 0.1 ) *( xl - 0.1 ) + b *( xl - 0.1 ) *( xl - 0.1 ) + c *( xl - 0.1 ) + d ) < 0 )
        { liczba = liczba + 1;
            std::cout << "3";
            do
            xl = xl - 0.1;
            while(( a * xl * xl * xl + b * xl * xl + c * xl + d ) *( a *( xl - 0.1 ) *( xl - 0.1 ) *( xl - 0.1 ) + b *( xl - 0.1 ) *( xl - 0.1 ) + c *( xl - 0.1 ) + d ) > 0 && xl > - d2 );
           
            if(( a * xl * xl * xl + b * xl * xl + c * xl + d ) *( a *( xl - 0.1 ) *( xl - 0.1 ) *( xl - 0.1 ) + b *( xl - 0.1 ) *( xl - 0.1 ) + c *( xl - 0.1 ) + d ) < 0 )
            { liczba = liczba + 1;
            } } }
    else
    {
        std::cout << "4";
        do
        xp = xp + 0.1;
        while(( a * xp * xp * xp + b * xp * xp + c * xp + d ) *( a *( xp + 0.1 ) *( xp + 0.1 ) *( xp + 0.1 ) + b *( xp + 0.1 ) *( xp + 0.1 ) + c *( xp + 0.1 ) + d ) > 0 && xp < d2 );
       
        if(( a * xp * xp * xp + b * xp * xp + c * xp + d ) *( a *( xp + 0.1 ) *( xp + 0.1 ) *( xp + 0.1 ) + b *( xp + 0.1 ) *( xp + 0.1 ) + c *( xp + 0.1 ) + d ) < 0 )
        { liczba = liczba + 1;
            std::cout << "5";
            do
            xp = xp + 0.1;
            while(( a * xp * xp * xp + b * xp * xp + c * xp + d ) *( a *( xp + 0.1 ) *( xp + 0.1 ) *( xp + 0.1 ) + b *( xp + 0.1 ) *( xp + 0.1 ) + c *( xp + 0.1 ) + d ) > 0 && xp < d2 );
           
            if(( a * xp * xp * xp + b * xp * xp + c * xp + d ) *( a *( xp + 0.1 ) *( xp + 0.1 ) *( xp + 0.1 ) + b *( xp + 0.1 ) *( xp + 0.1 ) + c *( xp + 0.1 ) + d ) < 0 )
            { liczba = liczba + 1;
                std::cout << "6";
                do
                xp = xp + 0.1;
                while(( a * xp * xp * xp + b * xp * xp + c * xp + d ) *( a *( xp + 0.1 ) *( xp + 0.1 ) *( xp + 0.1 ) + b *( xp + 0.1 ) *( xp + 0.1 ) + c *( xp + 0.1 ) + d ) > 0 && xp < d2 );
               
                if(( a * xp * xp * xp + b * xp * xp + c * xp + d ) *( a *( xp + 0.1 ) *( xp + 0.1 ) *( xp + 0.1 ) + b *( xp + 0.1 ) *( xp + 0.1 ) + c *( xp + 0.1 ) + d ) < 0 )
                { liczba = liczba + 1; }
            } } }
   
    std::cout << "Sa" << liczba << "miejsca zerowe" << std::endl;
   
   
    return 0;
}

Wiem, że kod ma pewnie jeszcze wiele błędów, ale tylko ten jest trudny do rozwiązania.
P-111258
» 2014-06-01 15:24:21
d2 jest niezainicjalizowane.
P-111259
Temat założony przez niniejszego użytkownika
» 2014-06-01 15:34:11
Dzięki, teraz wystarczy, że uporam się z całą resztą, ale to dam sobie radę sam.
P-111260
« 1 »
 Strona 1 z 1