開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 コンソール アプリケーション |
プロジェクト名 |
ddump |
アプリケーションの種類 |
コンソール アプリケーション |
追加のオプション |
空のプロジェクト |
ddump.c
#include <stdio.h>
void ddump(double value)
{
unsigned long long v = *(unsigned long long *)&value;
char bit[64+3];
char *b = bit;
char sign; // 符号部(1bit)
int exponent; // 指数部(11bit)
double fraction; // 仮数部(52bit)
int i;
for (i = 0; i < 64; i++) {
*b++ = (v & (1ULL<<(63-i))) ? '1' : '0';
if (i == 0 || i == 11) *b++ = '.';
}
*b = '\0';
sign = (v & 0x8000000000000000ULL) ? '-' : '+';
exponent = ((v >> 52) & 0x7ff) - 1023;
fraction = (v & 0xfffffffffffffULL) / (double)0x10000000000000ULL;
printf("%s\ns:%c e:2^%d f:1+%.15f\n", bit, sign, exponent, fraction);
}
int main()
{
ddump(1.5);
ddump(0.5);
ddump(-2.0);
ddump(0.0);
return 0;
}
出力
0.01111111111.1000000000000000000000000000000000000000000000000000
s:+ e:2^0 f:1+0.500000000000000
0.01111111110.0000000000000000000000000000000000000000000000000000
s:+ e:2^-1 f:1+0.000000000000000
1.10000000000.0000000000000000000000000000000000000000000000000000
s:- e:2^1 f:1+0.000000000000000
0.00000000000.0000000000000000000000000000000000000000000000000000
s:+ e:2^-1023 f:1+0.000000000000000
最終更新:2012年08月31日 11:22