#include <iostream>
using namespace std;
int main()
{
cout.precision(32);
float val = 268433072;
float add = 13.5;
cout << "result =" << (val + add) << endl;
}
Sto compilando il programma di cui sopra alla norma g++ main.cc
e funzionante con ./a.out
Strano C++ float bug
L'ouput che ricevo è però,
result =268433088
Chiaramente, questo è non è la risposta corretta. Perché sta succedendo?
EDIT: Questo non si verifica quando si utilizza double
al posto di float
Si potrebbe desiderare di leggere [Ciò che ogni scienziato informatico dovrebbe sapere sull'aritmetica virgola mobile] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html). –
Un'altra buona lettura sui problemi in virgola mobile: http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary – mtrw
Che comportamento ti aspetti invece? (Voglio dire, dal fatto che hai provato sia 'float' che' double', ovviamente ti rendi conto che 'float' ha una precisione limitata ...) – ruakh