我想保护我的变量不存储溢出值。
我正在计算一棵树的各个级别和某些阶段的损失。
- 它给出的值类似于4.94567e+302;这个值正确吗?如果我把它(如最小值、最大值等)与其他值进行比较,它会给出正确的答案吗
- 有时它给出的答案是否定的,但公式不能给出负值,所以这种值肯定是错误的
我想在我的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确实大得令人怀疑。再加上你说你有时会得到意想不到的负值,我建议你仔细看看你的计算。
一个合理的猜测是:你在修改指针,把指向整数和浮点数的指针混在一起。但没有人能在看不到代码的情况下分辨出来。