BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #43034同步于 2013/1/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

求教版上的各位delphi大神,发现delphi运行结果不稳定~

richardrain
2013/1/18镜像同步13 回复
想来想去还是放这个版面吧。可能有点不太合适,请各位xdjm见谅。 各位兄弟姐妹好! 本人从事delphi方面的开发有1年左右的时间了。这1年多的时间发现了delphi有几个非常诡异的问题。 问题1:有一次遇到过delphi的库函数在不同工程运行结果不一致。库函数具体是rightstr,比如rightstr('0102', 2),运行的正确结果应该是02。但是之前的有一个工程运行是正确的,而在另外一个工程执行的结果是10,相当于把最后一位的2给忽略了。最后无奈采用了copy函数来解决的。 问题2:有一次定义了两个double的变量,比如a和b,a和b的值都从外部界面上获得,比如a获取到的值是5,b获取到的值是4.8,最后进行的运算是b-a,正确的结果应该是-0.2,可最后得到的结果是-0.19。实在是很郁闷。后来的解决方法是强制将a和b转换为2位小数之后再进行减法运算。 因为上面的事情让本人觉得delphi有点不靠谱。这个当然有可能是本人程序的问题。不知道版上的各位delphi同行遇到过类似的问题没有。 谢谢!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
coolfantasy机器人#1 · 2013/2/20
还有一个可能是电脑硬件故障,导致指针乱飞
zxsword机器人#2 · 2013/2/20
我去年年底遇到了lcdc的中断函数代码的某条指令错了1个字节的情况,就是换了条内存,然后好了。。。 【 在 coolfantasy 的大作中提到: 】 : 还有一个可能是电脑硬件故障,导致指针乱飞
richardrain机器人#3 · 2013/2/26
看来非常奇特呀~ 【 在 zxsword 的大作中提到: 】 : 我去年年底遇到了lcdc的中断函数代码的某条指令错了1个字节的情况,就是换了条内存,然后好了。。。
zxsword机器人#4 · 2013/2/26
楼主的程序是不是在x86平台上跑的,换台机器跑如何?随机现象是稳定的还是不稳定的?推测是不是硬件问题的话,换个硬件平台就好啦。 至于我说的情况,我遇到过类似莫名其妙的问题其实蛮多的,内存错,cache错等等,我是在FPGA上跑程序,硬件平台本来就不稳定,嗯。 【 在 richardrain 的大作中提到: 】 : 看来非常奇特呀~ :
richardrain机器人#5 · 2013/2/26
还有就是遇到floattostr的诡异问题。 比如a=5,b=4.9,floattostr(a-b)的结果是0.0999999999999996,这个结果是错误的;而a=5,b=4.8,floattostr(a-b)的结果是0.2。这个结果是正确的。 【 在 zxsword 的大作中提到: 】 : 我去年年底遇到了lcdc的中断函数代码的某条指令错了1个字节的情况,就是换了条内存,然后好了。。。
zxsword机器人#6 · 2013/2/26
这个算是正确的问题吧?浮点数编码的缘故。试试别用float,用double,应该就对了。 0.09999999999999这样的结果也是对的,浮点数本来就是不精确的。 【 在 richardrain 的大作中提到: 】 : 还有就是遇到floattostr的诡异问题。 : 比如a=5,b=4.9,floattostr(a-b)的结果是0.0999999999999996,这个结果是错误的;而a=5,b=4.8,floattostr(a-b)的结果是0.2。这个结果是正确的。 :
richardrain机器人#7 · 2013/2/26
我上面例子中的变量a和变量b就是double类型的呀~。关键是不理解为啥a=5,b=4.9,这组数据出问题;而a=5,b=4.8,这组数据是正确的。为什么第一组数a-b=0.1,计算机不能存0.1这个浮点数吗? 【 在 zxsword 的大作中提到: 】 : 这个算是正确的问题吧?浮点数编码的缘故。试试别用float,用double,应该就对了。 : 0.09999999999999这样的结果也是对的,浮点数本来就是不精确的。
richardrain机器人#8 · 2013/2/26
另外,我所开发的应用程序就是需要跑在windows平台上的。另外前段时间还发现同一个程序在XP上和Win7上运行结果不一致。还有就是所开发的应用程序都是进行财务相关运算的,所以不能差一分一厘。
zxsword机器人#9 · 2013/2/26
浮点数就是有误差的。 试着保留1位小数打印,打印出来就是0.1了。 【 在 richardrain 的大作中提到: 】 : 我上面例子中的变量a和变量b就是double类型的呀~。关键是不理解为啥a=5,b=4.9,这组数据出问题;而a=5,b=4.8,这组数据是正确的。为什么第一组数a-b=0.1,计算机不能存0.1这个浮点数吗? :