奇怪的小于号"<"
编程时遇到一个问题如下:_$ (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呢? 属于一个二进位的数系与十进位数系
在小数位换算上的数学问题... 浮点数不是哪么精确地。。。 不知道为什么?应该是相等才对啊?..... 本帖最后由 llsheng_73 于 2015-1-14 14:38 编辑
(apply'<(mapcar'(lambda(x)(read(rtos x 2 16)))(list a(* 1.05 b))))
nil fl202 发表于 2015-1-14 13:48 static/image/common/back.gif
不知道为什么?应该是相等才对啊?.....
十进制小数在转成二进制时可能是无限循环小数,而计算机是有字长的,多余的尾数会四舍五入,这样在实数比较时会出现异常。 这个还真没发现啊,汗! llsheng_73 发表于 2015-1-14 14:35 static/image/common/back.gif
nil
对字符串进行比较,高招!学习了!!! 真有高手哇。。。。。。。。。。。。。。。 浮点数的判断最好加容差
这样就可以得到想要的结果了
如程序这样写:
(< (atof (rtos a 2 10)) (atof (rtos (* 1.05 b) 2 10)))
页:
[1]
2