もちろん、すべての実数に対しては適用できません。
double f (double d)
{
long long int x = * (long long int*) & d;
if (x & 1) {
x &= 0xfffffffffffffffe;
} else {
x = (x | 1) ^ 0x8000000000000000;
}
return * (double*) & x;
}
意味はわかりにくいけど、もっとシンプルなプログラム。
double f (double d)
{
long long int x = * (long long int*) & d;
x = x ^ 1 ^ (x << 63);
return * (double*) & x;
}
