Problem rzutowania long longa i double
Ostatnio zmodyfikowano 2018-11-12 17:22
milmega Temat założony przez niniejszego użytkownika |
Problem rzutowania long longa i double » 2018-11-12 14:53:10 Witam, nie rozumiem dlaczego warunek ifa nie jest spełniany skoro wyrażenie bez rzutowania daje -5. Gdy rzutuje je na long long zachodzi jakiś błąd rzutowania bo zwraca -4. long long x = - 5; long long y = 15; double a = 1.0 * 5 /- 3; double m = 1.0 *( 5 - a );
cout << 1.0 *( y - m ) / a; cout <<( long long )( 1.0 *( y - m ) / a );
if( x == 1.0 *( y - m ) / a ) cout << "dziala";
Jak rzutować by if został spełniony? |
|
pekfos |
» 2018-11-12 16:16:51 cout wypisuje ci wartość zaokrągloną do najbliższej liczby całkowitej. Konwersja na liczbę całkowitą zaokrągla w stronę zera. Dostajesz -4 i -5, bo liczba nie jest równa ani -4, ani -5. |
|
milmega Temat założony przez niniejszego użytkownika |
» 2018-11-12 16:40:16 Czyli, żeby dostać -5 wystarczy zaokrąglić w górę? |
|
pekfos |
» 2018-11-12 17:22:18 Jak chcesz tylko 'dostać -5' to wystarczy jak po prostu napiszesz sobie -5 i wywalisz tamte obliczenia. Gdy wynik bierze się z jakichś obliczeń, przy testowaniu równości musisz uwzględniać błąd zaokrągleń. W większości przypadków zwykłe == nie ma sensu dla liczb zmiennoprzecinkowych. #include <iostream>
int main() { double x = 0; for( int i = 0; i < 10; ++i ) x += 0.1; std::cout << "x = " << x << '\n'; std::cout << "x==1 = " <<( x == 1.0 ) << '\n'; std::cout << "x-1 = " << x - 1 << '\n'; } x = 1 x==1 = 0 x-1 = -1.11022e-016 |
|
« 1 » |