通过浮到一个功能用C++出现改变的精度

0

的问题

这是一个非常新的问题,但我想知道这背后的原因: -如果我试下面C++编码:

void floatreturn(float i){
      //nothing
}

int main(){
    float a = 23.976;
    floatreturn(a);
    return 0;
}

监控所传递的价值,这似乎是 23.9759998 当进入floatreturn. 因此,任何处理的价值在功能需要,以手工调整的精确度。 是有一个原因,以及任何避免方式?

c++ floating-point
2021-11-24 04:32:57
1

最好的答案

0

这一问题之前发生的事情 floatreturn(a);.
这事发生在 float a = 23.976;
floatreturn(a); 是无关紧要的。

大约有2^32个不同的价值观 float 可以编码完全一致。 23.976不是他们中的一个。 最近的编码 float 是关于23.9759998...

避免、使用价值,可以完全作为一个编码 float 或容忍正在靠近-约1部分中的224

2021-11-24 16:43:03

谢谢标记的链接和chux为简明扼要的答案。
mv_p

只是一个更多的教育点为我:为什么诉讼默认为一个精密的3位小数,如果我们重新打印的变量没有设置精密的输出? 我拿到存储的浮动总会回报最近的二进制的浮动可能的,并且诉讼是四舍五入。
mv_p

@mv_p什么是 确切的 输出你看到的?
chux - Reinstate Monica

有一个简单的'浮点x=23.976;状<<x;'I see"23.976"
mv_p

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................