Se assegno un valore a un calcolo a virgola mobile su una variabile per primo, quindi assegno a un int non firmato con casting implicito, ottengo una risposta. Ma se assegno lo stesso calcolo direttamente all'int unsigned, sempre con il tipo implicito, ottengo una risposta diversa.Interpretato da un diverso risultato dello stesso cast, float to int
Qui di seguito è il codice di esempio ho compilato e corse per dimostrare:
#include <iostream>
int
main(int argc, char** argv)
{
float payloadInTons = 6550.3;
// Above, payloadInTons is given a value.
// Below, two different ways are used to type cast that same value,
// but the results do not match.
float tempVal = payloadInTons * 10.0;
unsigned int right = tempVal;
std::cout << " right = " << right << std::endl;
unsigned int rawPayloadN = payloadInTons * 10.0;
std::cout << " wrong = " << rawPayloadN << std::endl;
return 0;
}
Qualcuno ha informazioni sul perché "giusto" è giusto, e "sbagliato" è sbagliato?
A proposito, sto usando gcc 4.8.2 su Ubuntu 14.04 LTS, se è importante.
Sarebbe un po 'più ... impressionante se includessi anche l'output che stai vedendo. Su [ideone.com] (http://ideone.com/0SMdPN) ho ottenuto 'giusto = 65503 sbagliato = 65502'. – unwind
Questo ha il tag C, ma sembra C++. –
È a causa della precisione. Se moltiplichi sia per '100.0' che per' 10.0', lo capirai. –