明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2291|回复: 10

[已解答] 奇怪的小于号"<"

[复制链接]
发表于 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呢?

本帖被以下淘专辑推荐:

发表于 2015-1-13 22:17:25 | 显示全部楼层
属于一个二进位的数系与十进位数系
在小数位换算上的数学问题...
发表于 2015-1-14 10:28:30 | 显示全部楼层
浮点数不是哪么精确地。。。
发表于 2015-1-14 13:48:28 | 显示全部楼层
不知道为什么?应该是相等才对啊?.....
发表于 2015-1-14 14:35:40 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-1-14 14:38 编辑

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

nil

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 神马都是浮云

查看全部评分

发表于 2015-1-14 19:23:28 | 显示全部楼层
fl202 发表于 2015-1-14 13:48
不知道为什么?应该是相等才对啊?.....

十进制小数在转成二进制时可能是无限循环小数,而计算机是有字长的,多余的尾数会四舍五入,这样在实数比较时会出现异常。
发表于 2015-1-15 11:51:02 | 显示全部楼层
这个还真没发现啊,汗!
发表于 2015-1-15 12:10:03 | 显示全部楼层
llsheng_73 发表于 2015-1-14 14:35
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)))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-26 20:59 , Processed in 0.195760 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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