C言語なら俺に聞け(入門篇) Part 19
■ このスレッドは過去ログ倉庫に格納されています
0751デフォルトの名無しさん
2007/10/11(木) 07:08:12グラフィックライブラリやハードがfloat前提の設計になっているなどの理由かな。
byteじゃなくてlongへの変換だけどちょっと作ってみた。遅そうだ(笑
long hage(float f) {
long *b = (long *) &f;
int sign = (*b >> 31) & 0x00000001;
int exp = (*b >> 23) & 0x000000ff;
long frac = *b & 0x007fffff;
if ((exp == 0) && (frac == 0)) return 0;
if (exp == 0) return 0; // 非正規化数
if (exp == 255) return -1; // 無限大 NaN
// 正規化数
char tmp = (exp - 127 - 23) & 0x0ff;
exp = tmp; // 符号拡張
frac |= 0x00800000;
if (exp > 0) frac <<= exp;
else frac >>= -exp;
if (sign) frac = -frac;
return frac;
}
■ このスレッドは過去ログ倉庫に格納されています