Sono abbastanza un novizio da c. Così, quando scrivo una demo di un piccolo gioco, affronterò un problema davvero strano.Float non cambia quando aggiungo 0.1
void testC()
{
float a = 825300160;
float b = a + 0.1;
assert(a != b);
}
La dichiarazione di asserzione precedente non può essere approvata. Molto strano.
Il mio ambiente è mac os ml. gcc 4.2.1
'float' non ha una precisione sufficiente per distinguere tra' 825300160' e '825300160.1'. – Mysticial
Un numero a virgola mobile ha circa 6 cifre decimali di precisione. (Prova invece 'double'.) –
' float' di solito ha una precisione di soli 24 bit. 'a' è più grande di' 2^29', e 'b <2^(- 3)', quindi 'b' è parecchi bit oltre ciò che potrebbe influenzare' a'. –