当前位置:  开发笔记 > 编程语言 > 正文

可以以某种方式改变变量吗?

如何解决《可以以某种方式改变变量吗?》经验,为你挑选了1个好方法。

所以我有一个看起来像这样的函数:

float function(){
    float x = SomeValue;
    return x / SomeOtherValue;
}

在某些时候,此函数溢出并返回一个非常大的负值.为了尝试准确地追踪这发生的位置,我添加了一个cout语句,以便函数看起来像这样:

float function(){
    float x = SomeValue;
    cout << x;
    return x / SomeOtherValue;
}

它工作了!当然,我通过使用双重完全解决了这个问题.但我很好奇为什么这个功能在我做的时候能正常工作.这是典型的,还是我错过了其他地方的错误?

(如果有任何帮助,浮点数中存储的值只是一个整数值,而不是一个特别大的值.我只是把它放在一个浮点数中以避免转换.)



1> Rob Walker..:

欢迎来到漂浮的浮点世界.您得到的答案可能取决于您编译代码的浮点模型.

这是因为IEEE规范与运行代码的硬件之间存在差异.您的CPU可能有80位浮点寄存器,可用于保存32位浮点值.这意味着当值保持在寄存器中时,精度远远高于强制存储器地址(也称为"归位"寄存器).

当你将值传递给cout时,编译器必须将浮点写入内存,这会导致精度丢失和WRT溢出情况的有趣行为.

请参阅有关VC++ 浮点交换机的MSDN文档.您可以尝试使用/ fp:strict进行编译,看看会发生什么.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有