通常の方法
80 bit 精度の long double 型に対応していないコンパイラの場合、拡張倍精度浮動小数点値を直にソースコードへ記述する事ができないので、定数値をバイナリデータとして表現する必要があります。
定数作成ツールの一例.
エラーチェックは行われていないので注意してください(必要な場合は追加してください)。
#include <stdio.h>
#include "floatex.h"
void __cdecl main(void)
{
FLOATEX v;
unsigned int oldcw;
int i;
oldcw = floatex_storecw();
floatex_loadcw(FEX_MCW_EM | FEX_PC_64 | FEX_RC_NEAR);
/* 文字列の数値を FLOATEX 型に変換 */
floatex_ldstr_strtold(
"12345678", /* ここに定数を記述 */
NULL,
v);
/* バイト単位に表示する */
i = 0;
do{
if (v[i] > 9)
printf("0x");
printf("%x,",v[i]);
}while(++i < 10);
floatex_ldstr_term();
floatex_loadcw(oldcw);
}
上記のツールで定数値を 10 バイトの配列データとして表示し、それをソースコードにコピーします。
実行結果.
0,0,0,0,0,0x4e,0x61,0xbc,0x16,0x40
↓ コピーしてソースコードに貼り付ける
FLOATEX C12345678 = { 0,0,0,0,0,0x4e,0x61,0xbc,0x16,0x40 }; /* 定数 12345678 */
このツールでは、ldstr.dll を使用します(参照:「ldstr.dll」 )。floatex_ldstr_strtold により文字列を数値に変換し、そのデータを1バイト単位に表示しています。