作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道为什么 float 的精度问题随着不同的值而不同:
#include <iostream>
#include <iomanip>
int main ()
{
std::cout << std::setprecision(20);
double d1(1.0);
std::cout << d1 << std::endl;
double d2(0.1);
std::cout << d2 << std::endl;
return 0;
}
这个程序的输出是:
如果两个数字都是 double 类型(通常有精度问题),为什么编译器没有发现值 1.0 有任何问题而发现值 0.1 有问题。我不清楚的另一件事是,如果精度设置为 20 位,为什么 d2 的结果是包含 21 位的数字?
最佳答案
您的计算机使用浮点表示法,其中 1.0
可以准确存储,但 0.1
不能。这大概是IEC 60559 .
前导零不被视为精度的一部分(它们只是占位符);您的输出实际上有 20 位数字,不包括开头的 0.
。
关于c++ - 为什么 float 中的精度问题会因值而异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31421993/
我是一名优秀的程序员,十分优秀!