C++ 最大可表示负浮点数

C++ 最大可表示负浮点数,c++,c,cross-platform,floating-point,ps3,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\u MAX?您想要std::numeric\u limits::lowest(),但它仅是c++0x,因此目前不太跨平台 您肯

指定最大可表示负浮点数的平台无关方式是什么

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

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

本质上,是否存在定义良好的负等价物
FLT\u MAX

您想要
std::numeric\u limits::lowest()
,但它仅是c++0x,因此目前不太跨平台

您肯定不想要
std::numeric\u limits::min()
——这是最小的量级,而不是最大的负值


如果你想要的东西总是比所有其他的双倍数字都少,使用
-numeric\u limits::infinity()

而不知道/*stuff*/中的内容,我认为你的问题在这里无法完全解决

这里有一组关于浮点计算固有问题的幻灯片:-其中可能有一些关于问题来源的提示


SPU上的IEEE 754单精度浮点与PPU上的IEEE 754单精度浮点不同-SPU ISA文件第9章中有完整解释,其中还包括单精度浮点数的最大值。

Upvoting,因为我们确实需要一个非常大的负数,这个负数肯定比其他任何数字都小。我接受这个答案——在阅读了详细介绍SPU体系结构的链接文档后,很明显,
-FLT_MAX
不起作用。顺便说一句,
/*stuff*/
中的代码应该不重要,as
x
仅在某些不符合的条件下被触摸<当我们检查
x>0.0f
时,code>x没有改变,这就是为什么当它通过时会有很多擦伤!哦,我错过了if块中的评论。很高兴听到你已经解决了:)检查。可能有用为什么不使用负无穷大?除非SPU和PPU具有不同的浮点精度,否则这应该有效。我怀疑您的代码中注释掉的/*stuff*/部分有问题。不清楚(无论如何,对我来说)您期望代码做什么以及它实际做什么。考虑到浮点数是如何表示的,它的负等价物不是仅仅是
-FLT\u MAX
(您已经在使用)吗?到底是什么坏了?@stacker-
FLT\u MIN!=-FLT_最大值