Nazywa się type punning. Będzie interpretować float
jako int
. Oznacza to, że reprezentacja bitów jest dokładnie kopiowana.
Jest to operacja potencjalnie niebezpieczna, ponieważ niektóre reprezentacje bitowe liczb całkowitych zmiennoprzecinkowych mogą być przedstawieniami pułapek jako liczby całkowite (nie w przypadku zmiennych IEEE-754 i liczb całkowitych z uzupełnieniem 2s).
Dodatkowo może nie działać, ze względu na niezdefiniowane zachowanie zgodnie ze standardem C. Narusza on ścisłą regułę aliasingu.
C obsługuje tylko dostęp do zmiennej innego typu za pośrednictwem memcpy
.
Jest to ważny sposób standardowy C pisania operacji:
int y; float x = 42.0f;
memcpy(&y, &x, sizeof(x));
C99 dodaje inny sposób to zrobić, za pomocą union
:
union { int y; float x; } u = { .x = 42.0f };
int y = u.y;
Carmack faktycznie nie napisać algorytm ; zobacz [stronę Wiki] (https://en.wikipedia.org/wiki/Fast_inverse_square_root#History_and_investigation). – DylanSp