找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

skill 操作浮点数

[复制链接]
admin 发表于 2012-9-9 01:11:15 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
procedure( test_float()
? let(
? ? ( fNum
? ? ? fData
? ? ? fNew
? ? )
? ? fNum = 2.0925
? ? fData = 25.4
? ? fNew = fNum*fData
? ? printf("%f <-> %.3f\n" fNew fNew)

? ? if( fNew*1000-round(fNew*1000)>=0.5 then
? ? ? ? println("right")
? ? else
? ? ? ? println("wrong")
? ? )
); end let
);end procedure

运行test_float的输出结果如下:
53.149500 <-> 53.149
"wrong"
但是如果你把上面的命令一行一行敲入skill develop窗口,得到的结果如下
53.149500 <-> 53.150
“right"

问题来了,为什么相同的代码,单行调试是没有问题的,而在程序中就有问题呢?
再看看下面的例子大概就能理解为什么了。
procedure( test_float()
? let(
? ? ( fNum
? ? ? fData
? ? ? fNew
? ? )
? ? fNum = 2.0925
? ? fData = 25.4
? ? fNew = fNum*fData
? ? println( fNew*1000-round(fNew*1000)-0.5 )? ?
); end let
);end procedure
运行这个test_float的结果如下:
-1.455192e-011
但是如果单独在skill开发窗口中执行,结果将是:
0
奇怪吧,其实这就是一种机器不能准确表示所有的数字的一种表述。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 21:50 , Processed in 0.056256 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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