#include <iostream>
using namespace std;
int main()
{
cout.precision(32);
float val = 268433072;
float add = 13.5;
cout << "result =" << (val + add) << endl;
}
Mam kompilacji powyższy program ze standardowym g++ main.cc
i uruchomienie go z ./a.out
Weird C++ unosić bug
Ouput Otrzymuję jednak,
result =268433088
Oczywiście, jest to nie jest to właściwa odpowiedź. Dlaczego tak się dzieje?
EDIT: To nie występuje podczas korzystania double
w miejsce float
Możesz przeczytać [Co każdy informatyk powinien wiedzieć o arytmetyki zmiennoprzecinkowej] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). –
Kolejny dobry odczyt na temat zagadnień zmiennoprzecinkowych: http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary – mtrw
Jakie zachowanie oczekujesz zamiast tego? (Mam na myśli to, że wypróbowałeś zarówno 'float' jak i' double', oczywiście zdajesz sobie sprawę, że 'float' ma ograniczoną precyzję.) – ruakh