開発環境 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