首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止C++变量获得OverFlow?如果值小于任何UpperBound的值,则为DataType

防止C++变量获得OverFlow?如果值小于任何UpperBound的值,则为DataType
EN

Stack Overflow用户
提问于 2013-07-29 00:41:12
回答 2查看 316关注 0票数 0

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

我在计算一棵树的每一个层次和某些阶段的损失。

  1. 它给出了像4.94567e+302这样的值;这个值正确吗-- .If --我把它与任何其他值-- .Will --进行比较--它给出了正确的答案?
  2. 有些时候它给出了否定的答案,但公式不能给出负值,所以这种价值肯定是错误的

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

ForExample:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2013-07-29 07:09:28

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-29 02:34:53

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

代码语言:javascript
复制
if(loss value is greater than Capacity)

顾名思义不能工作。loss中的值不能大于它自己的数据类型最大值。

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

合理的猜测:您正在修改指针,并将指向整数和浮点数的指针混在一起。但没人能不看代码就知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17914499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档