gpt4 book ai didi

c++ - cout 能以某种方式改变变量吗?

转载 作者:可可西里 更新时间:2023-11-01 16:27:02 24 4
gpt4 key购买 nike

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

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

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

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

成功了!当然,我通过使用 double 完全解决了这个问题。但是我很好奇为什么这个函数在我计算它的时候能正常工作。这是典型的,还是其他地方可能存在我遗漏的错误?

(如果有帮助,存储在 float 中的值只是一个整数值,而不是特别大的值。我只是将它放在 float 中以避免强制转换。)

最佳答案

欢迎来到精彩的浮点世界。您得到的答案可能取决于您编译代码时使用的浮点模型。

发生这种情况是因为 IEEE 规范与运行代码的硬件之间存在差异。您的 CPU 可能有 80 位浮点寄存器,用于保存 32 位浮点值。这意味着当值保留在寄存器中时比将其强制到内存地址(也称为“归位”寄存器)时精度要高得多。

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

请参阅有关 VC++ 的 MSDN 文档 floating point switches .您可以尝试使用/fp:strict 进行编译,看看会发生什么。

关于c++ - cout 能以某种方式改变变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com