0

我想保护我的变量不存储溢出值。

我正在计算树中每个级别和某些阶段的损失。

  1. 它给出像 4.94567e+302 这样的值;这个值是否正确。如果我将它(如最小值、最大值等)与任何其他值进行比较。它会给出正确的答案吗?
  2. 有时它给出否定的答案,但公式不能给出负值,所以这种值肯定是错误的

我想在我的 c++ 代码中做以下事情。

例如:

long double loss;  //8 Bytes Floating Number
loss=calculate_loss(); 

if(loss value is greater than Capacity)
do
store 8 bytes in loss abd neglect remaining;
end if
4

2 回答 2

1

如果您的容量应限制为双(或浮点)数据类型的最大或最小容量,您可以使用浮点异常(不要误认为 C++ 异常)。它们的信号需要在编译器选项中启用,您可以将它们映射到检测数据类型溢出的 C++ 异常。

这是一个非常好的描述 FP 异常的 msdn 页面。在页面底部,您将找到如何将其映射到 C++ 异常的示例。 http://msdn.microsoft.com/en-us/library/aa289157%28v=vs.71%29.aspx

于 2013-07-29T07:09:28.007 回答
0

C++ 中有一个limits.h,但是这个

if(loss value is greater than Capacity)

不能按定义工作。in 的值loss 不能大于其自身数据类型的最大值。

您的示例值 5 乘以 10^302 确实非常大。再加上你有时会得到意想不到的负值的说法,我建议你仔细看看你的计算。

一个合理的猜测:您正在修改指针并将指向整数和浮点数的指针混合在一起。但是没有看到代码谁也说不出来。

于 2013-07-29T02:34:53.433 回答