天青色 发表于 2015-1-13 21:22:51

奇怪的小于号"<"

编程时遇到一个问题如下:
_$ (setq a 0.84 b 0.8)
0.8
_$ (< a (* 1.05 b))
T
_$ (setq a 2 b 1)
1
_$ (< a (* 2 b))
nil
为什么第一个小于号判断式返回值是T呢?

Andyhon 发表于 2015-1-13 22:17:25

属于一个二进位的数系与十进位数系
在小数位换算上的数学问题...

zzyong00 发表于 2015-1-14 10:28:30

浮点数不是哪么精确地。。。

fl202 发表于 2015-1-14 13:48:28

不知道为什么?应该是相等才对啊?.....

llsheng_73 发表于 2015-1-14 14:35:40

本帖最后由 llsheng_73 于 2015-1-14 14:38 编辑

(apply'<(mapcar'(lambda(x)(read(rtos x 2 16)))(list a(* 1.05 b))))
nil

ZZXXQQ 发表于 2015-1-14 19:23:28

fl202 发表于 2015-1-14 13:48 static/image/common/back.gif
不知道为什么?应该是相等才对啊?.....

十进制小数在转成二进制时可能是无限循环小数,而计算机是有字长的,多余的尾数会四舍五入,这样在实数比较时会出现异常。

陨落 发表于 2015-1-15 11:51:02

这个还真没发现啊,汗!

陨落 发表于 2015-1-15 12:10:03

llsheng_73 发表于 2015-1-14 14:35 static/image/common/back.gif
nil

对字符串进行比较,高招!学习了!!!

此站网友 发表于 2015-1-16 19:21:38

真有高手哇。。。。。。。。。。。。。。。

天青色 发表于 2015-1-20 22:42:17

浮点数的判断最好加容差
这样就可以得到想要的结果了
如程序这样写:
(< (atof (rtos a 2 10)) (atof (rtos (* 1.05 b) 2 10)))
页: [1] 2
查看完整版本: 奇怪的小于号"<"