L'altro giorno ho scoperto su StackOverflow una proprietà curiosa dei numeri in floating-point (IEEE 754): dato un double, aggiungendo 6755399441055744.0 e prendendo i 32 bit meno significativi (ovvero, i primi 2 byte su macchine little-endian) si ottiene la sua rappresentazione intera.

Ovvero, si può scrivere una funzione di conversione estremamente rapida da double a int in questa maniera (su macchine little-endian):
codice:
inline int32_t double2int(double d)
{
   d += 6755399441055744.0;
   return reinterpret_cast<int32_t&>(d);
}
(svantaggio: non sa gestire tutti i "casi strani" - NaN, infiniti, numeri denormalizzati e compagnia -, ma gestisce senza problemi numeri positivi e negativi rappresentabili con interi a 32 bit, e arrotonda con l'arrotondamento correntemente selezionato per le operazioni FP)

La domanda è: come funziona questo trucco? perché proprio quel numero magico?
(la soluzione domani )