在网上搜索,我发现了以下用于计算 IEEE 格式的浮点数符号的例程。这也可以很容易地扩展到双倍。
// returns 1.0f for positive floats, -1.0f for negative floats, 0.0f for zero
inline float fast_sign(float f) {
if (((int&)f & 0x7FFFFFFF)==0) return 0.f; // test exponent & mantissa bits: is input zero?
else {
float r = 1.0f;
(int&)r |= ((int&)f & 0x80000000); // mask sign bit in f, set it in r if necessary
return r;
}
}
(来源:“32 位浮点数的快速符号”,Peter Schoffhauzer)
不过,由于位二进制操作,我厌倦了使用这个例程。我需要我的代码在具有不同字节顺序的机器上工作,但我不确定 IEEE 标准规定了多少,因为我找不到今年发布的最新版本。无论机器的字节顺序如何,有人可以告诉我这是否可行?
谢谢,帕特里克