2

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

我们发现一个算法在 PS3 的 SPU 上运行时会出错,但在为 PPU 编译时运行良好:

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

本质上,是否存在明确定义的负等价物FLT_MAX

4

2 回答 2

6

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

你绝对不想要std::numeric_limits::min()- 那是最小的量级,而不是最负的。

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

于 2010-09-03T06:07:09.830 回答
4

在不知道 /* stuff */ 中有什么的情况下,我认为您的问题无法在这里得到完全解决。

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

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

于 2010-09-03T23:26:31.033 回答