数值计算:计算机精度 |
您所在的位置:网站首页 › 计算的精度 › 数值计算:计算机精度 |
数值计算:计算机精度机器数
由于计算机的储存空间有限,所以对于一个实数,有时候存储的只是它的近似值 ![]() 其中 在以32位表示单精度实数的计算机中,阶码用8位表示,位数用24位表示,其表示的范围为 对于64位表示的双精度值,用11位表示阶码,用53位表示尾数,其表示的范围为 在计算机的计算过程中,由于本身的存储的数值可能只是是近似值,而且中间结果可能会有舍入,导致误差不断地增大,例如我们计算n个0.1相加的和(n=10, 100, 1000, ...),代码如下: #include using namespace std; int main(){ int n = 1; for(int j = 0; j < 9; j++){ n = n * 10; float ans = 0; for(int i = 0; i < n; i++){ ans += (1 / 10.0); } printf("n= %d\nans= %f\n", n, ans); } system("pause"); }结果为 n 计算结果 正确结果 10 1.000000 1 100 10.000002 10 1000 99.999046 100 10000 999.902893 1000 100000 9998.556641 10000 1000000 100958.343750 100000 10000000 1087937.000000 1000000 100000000 2097152.000000 10000000 1000000000 2097152.000000 100000000在计算过程中由于中间的结果不断被舍入,所以误差越来越大,到了最后由于0.1相对于中间结果来说太小了,所以加数0.1也被省略了,以至于到了最后即使n增大, 计算结果也是不变的。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |