"1-1/2+1/3-1/4+……+1/99-1/100求值,想问这里的double为啥不能换成float?

"1-1/2+1/3-1/4+……+1/99-1/100求值,想问这里的double为啥不能换成float?

int main(int argc, char *argv[])

{

double s=0;

int i;

for(i=1;i

问答/301℃/2024-05-11 09:00:42

优质解答:

误差在计算中的累积的问题.

float单精度浮点,double双精度浮点.

例如,自然数学中我们都知道1/6=0.1666666.是无穷小数,但是计算机中无法表示无穷小数,只能按一定精度截断.假设(仅仅是假设,只是为了说明问题,实际计算机中可能精度更高)

float 取0.167,double取0.1667,double的截断误差小于float.由于你的算法采用的迭代的方法,误差每一次都在累积.因此会出现float误差很大,double相对较小的现象.

况且,你的算式中不仅只有1/6,还有1/7,1/11.等很多无穷小数截断后的误差在累积.

因此,使用double比float好!

我来回答

猜你喜欢

Copyright © 作文乐园 Inc.
Www.821218.Com All Rights Reserved
网站、品牌合作请联系