gpt4 book ai didi

c++ - C/C++程序中数字浮点表示中的垃圾位

转载 作者:行者123 更新时间:2023-11-30 01:26:39 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Is JavaScript's Math broken?
Dealing with accuracy problems in floating-point numbers

考虑下面的代码及其输出:

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <limits>
#include <vector>


int main(int argc, char *argv[])
{
double xleft = 0;
double xright = 1.0;

double dx = 0.1;
std::cout << std::setprecision(36) << "dx is " << dx << std::endl;

int numgridpts = ((int) ceil (( xright - xleft )/dx)) + 1;


for (int i = 0; i < numgridpts ; ++i)
{
std::cout << std::setprecision(36) << xleft + i*dx << std::endl;
}

return 0;
}

[~:ICgen/$ ./a.out
dx is 0.100000000000000005551115123125782702
0
0.100000000000000005551115123125782702
0.200000000000000011102230246251565404
0.300000000000000044408920985006261617
0.400000000000000022204460492503130808
0.5
0.600000000000000088817841970012523234
0.700000000000000066613381477509392425
0.800000000000000044408920985006261617
0.900000000000000022204460492503130808
1

我的问题是,当我打印出精确到 36 位的数字时,为什么这些数字,0 , 0.5 和 1.0 准确地表示,wherars 其他数字似乎有一些垃圾数字放在最后?

此外,如果我添加 0.2 和 0.1 的浮点表示,如上面的输出所示,在垃圾位部分,它们似乎加起来不等于 0.3 的表示。

我正在使用 Linux Ubuntu 10.10 和 gcc 编译器

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