设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1685|回复: 5
打印 上一主题 下一主题

[已经解决] 为什么p (3.0-8.0/3.0)*3.0 == 1.0 显示false?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2011-8-21
帖子
51
跳转到指定楼层
1
发表于 2012-1-20 18:01:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 受pia专用ID 于 2012-1-21 20:00 编辑

p (3.0-8.0/3.0)*3.0 #=> 1
但为何p (3.0-8.0/3.0)*3.0 == 1.0就显示false?怎么解决?
p (3.0-8.0/3.0)*3.0 == 1 还是显示false啊
回复地面:
((3.0-8.0/3.0)*3.0).to_f==1
我这么写还是显示false
只能用这个方法了:Math.abs((3.0-8.0/3.0)*3.0-1)<=0.000001

点评

我知道= =打错了是.to_i==1但是这样做不好因为1.1.to_1也是1,比较好的还是普通做法  发表于 2012-1-21 20:27
是((3.0-8.0/3.0)*3.0).to_i = =。还有最好别这样用,Math.abs((3.0-8.0/3.0)*3.0-1)<=0.000001是比较正规的写法,因为浮点运算的误差,文艺写法和2B写法都是有问题的   发表于 2012-1-21 20:06
不好意思,打错了((3.0-8.0/3.0)*3.0).to_f==1.0 ,还有,如果回复的话直接在下面回复或者点评就好了,或者用@功能,你这样下我是看不到的  发表于 2012-1-21 20:05

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

2
发表于 2012-1-21 00:39:56 | 只看该作者
本帖最后由 feizhaodan 于 2012-1-21 00:40 编辑
  1. p (1.0).class
  2. p (1).class
复制代码
自己对比下。这就是人和计算机认识的区别。
回复

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

3
发表于 2012-1-21 00:43:06 | 只看该作者
Math.abs((3.0-8.0/3.0)*3.0-1)<=0.000001
这是普通程序猿
((3.0-8.0/3.0)*3.0).to_f==1
这是文艺程序猿
((3.0-8.0/3.0)*3.0).to_i.to_s(16)=="0x01"
这是2B程序猿

点评

p ((3.0-8.0/3.0)*3.0).to_f==1.0 还是显示false  发表于 2012-1-21 20:15
哎呀,蛋疼什么的最有爱了
回复

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1035
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

4
发表于 2012-1-21 01:29:50 | 只看该作者
p (3.0-8.0/3.0)*3.0 #=>1.0000000000000004
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
163 小时
注册时间
2011-11-12
帖子
56
5
发表于 2012-1-21 23:40:30 | 只看该作者
這是當代計算機浮點運算普遍的缺陷。目前的浮點數表示法是以二進制表示有效數位,當有限的十進制有效數位被轉換為二進制時,很多情況下就會導致二進制的表示成為無限數位。在有限的計算機位(32 位單精度,64 位雙精度)中表示浮點數時,它實際存儲的值只是近似於用戶原本想表示的值,是經過了計算機芯片「零舍一入」的。再經過一系列浮點運算後,這個誤差值就累積起來了,導致運算結果的誤差離預期的越來越遠。以前很多計算機軟件都是忽略了浮點運算的誤差而導致了嚴重的後果,導致火箭航程失控,股票系統崩潰等等。
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5478
在线时间
2563 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

6
发表于 2012-1-21 23:46:38 | 只看该作者
尽量先做乘法,最后做除法。尽量谋求整除的效果。

尤其是判定是否相等的时候,   a/b==c/d 这样的写法就比较糟糕,不如改成等价的 a*d==b*c ,避免除法,避免舍入误差。
从平淡走向更平淡。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-28 22:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表