Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dziwne zachowanie float

Ostatnio zmodyfikowano 2014-06-01 15:34
Autor Wiadomość
szneqz
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
pekfos
» 2014-06-01 15:04:56
Ułamki pisze się z kropką, a nie przecinkiem.
P-111253
szneqz
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
pekfos
» 2014-06-01 15:14:27
Podaj kod.
P-111256
szneqz
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
pekfos
» 2014-06-01 15:24:21
d2 jest niezainicjalizowane.
P-111259
szneqz
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