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

学习 时间:2026-03-30 16:11:24 阅读:8150
"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

最佳回答

缓慢的草丛

优雅的百合

2026-03-30 16:11:24

误差在计算中的累积的问题。float单精度浮点,double双精度浮点。例如,自然数学中我们都知道1/6=0。1666666。是无穷小数,但是计算机中无法表示无穷小数,只能按一定精度截断。假设(仅仅是假设,只是为了说明问题,实际计算机中可能精度更高)float 取0。167,double取0。1667,double的截断误差小于float。由于你的算法采用的迭代的方法,误差每一次都在累积。因此会出现float误差很大,double相对较小的现象。况且,你的算式中不仅只有1/6,还有1/7,1/11。等很多无穷小数截断后的误差在累积。因此,使用double比float好!

最新回答共有2条回答

  • 俭朴的钢笔
    回复
    2026-03-30 16:11:24

    误差在计算中的累积的问题。float单精度浮点,double双精度浮点。例如,自然数学中我们都知道1/6=0。1666666。是无穷小数,但是计算机中无法表示无穷小数,只能按一定精度截断。假设(仅仅是假设,只是为了说明问题,实际计算机中可能精度更高)float 取0。167,double取0。1667,double的截断误差小于float。由于你的算法采用的迭代的方法,误差每一次都在累积。因此会出现float误差很大,double相对较小的现象。况且,你的算式中不仅只有1/6,还有1/7,1/11。等很多无穷小数截断后的误差在累积。因此,使用double比float好!

上一篇 燃气热水器耗气量我的燃气热水器二十分钟用1立方的燃气,正不正常?出水温度还不错,洗澡也很爽,但也太贵了吧,洗一次澡要两块

下一篇 不同时间的不同月相?月相如何形成?