最大可表示负浮点数

时间:2010-09-03 05:40:56

标签: c++ c cross-platform floating-point ps3

什么是与平台无关的方法来指定最大可表示的浮点数?

我们发现一个算法在PS3的SPU上运行时崩溃,但在为PPU编译时工作正常:

float x = -FLT_MAX;
/* stuff */
if (x > 0.0f) {
    // If x is unchanged, code is executed on SPU
}

基本上,是否有明确定义的负等价FLT_MAX

2 个答案:

答案 0 :(得分:4)

你想要std::numeric_limits::lowest(),但它只是c ++ 0x,所以目前不是非常跨平台。

你绝对不希望std::numeric_limits::min() - 这是最小的,而不是最远的。

如果您想要的东西总是少于所有其他双打,请使用-numeric_limits<double>::infinity()

答案 1 :(得分:4)

如果不知道/ * stuff * /中的内容,我认为您的问题不能完全解决。

这里有关于浮点计算固有问题的一组很好的幻灯片:http://realtimecollisiondetection.net/pubs/GDC07_Ericson_Physics_Tutorial_Numerical_Robustness.ppt - 对于你的问题来源,你可能会有一些提示。

IEEE 754单精度浮点在SPU上与在PPU上不同 - 在http://cell.scei.co.jp/e_download.html提供的SPU ISA文档的第9章中有完整的解释,其中还包括最大幅度的a单精度浮点数。