设为首页 加入收藏

TOP

C语言陷阱:浮点运算
2014-11-24 07:20:51 来源: 作者: 【 】 浏览:1
Tags:语言 陷阱 浮点 运算

在Stack overflow上看到这样一个问题。

计算如下表达式的值:

P=(1/2-3/4)*(5/6-7/8)*...*[n/(n-1) - (n+2)/(n+3)]。

程序如下:



运行之后不管n为何值,p的值都输出为0,为什么?


初看好像程序没什么问题,但仔细想一下发现计算p的表达式p *= ((i)/(i+1)-(i+2)/(i+3))中的i是int型变量,对于i>=1,(i)/(i+1)永远都为0。


所以表达式应该修改为:p *= ((float)(i)/(i+1)-(float)(i+2)/(i+3));


或者 p *= ((i)/(i+1.0)-(i+2.0)/(i+3.0).


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux中getopt函数用法 下一篇Go语言并行之美 -- 超越 “Hello ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)