保护C++变量不被溢出?如果值小于任何DataType的UpperBound



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

我正在计算一棵树的各个级别和某些阶段的损失。

  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

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

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

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

if(loss value is greater than Capacity)

根据定义,无法运行loss中的值不能大于其自身的最大数据类型。

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

一个合理的猜测是:你在修改指针,把指向整数和浮点数的指针混在一起。但没有人能在看不到代码的情况下分辨出来。

相关内容

最新更新