首页 >

设计了一个程序,但是在自己电脑上运行结果不对,在别人电脑上运行是对的,是怎么回事? – 网络|

微博怎么知道谁悄悄关注我,室外dslam设备与交接箱怎么连接,gov.cn是什么域名设计了一个程序,但是在自己电脑上运行结果不对,在别人电脑上运行是对的,是怎么回事? - 网络|设计了一个程序,但是在自己电脑上运行结果不对,在别人电脑上运行是对的,是怎么回事不同的品牌的电脑,在双精度double的浮点数学运算上稍有差异。

2005年,偶在做数控的轨迹计算时,把编绎链接好的APP发行版(released)拷贝到几台IPC上。当时选了几款IPC工控机,一个用的是INTEL的CPU,一个用的是AMD的CPU。当时的操作系统用的都是WinXPsp3。

在INTELIPC上,运行正常。在AMDIPC上总是出问题,直线与圆弧总是显示没交点。后来,软件跟踪,发现直线一园弧相切的的一个误差计算上,二者存在差异,Intel的误差结果是0.00003,而AMD的是0.00008,软件定义的判断阀值是0.00005。

当时觉得不可思意,但结果就是这样。只能更改判断阀值,为保险期间,设为0.0001。以后所有设备运行,均正常。

大家可以用双精度做一些简单的加、减、乘、除、开方运算,同样的算式,同样的程序,在不同电脑上,运算结果是绝对有差异的。大家平时没有察觉到,是因为大家取的精度比较低。在高精尖的设备上,都很在意计算精度的处理。

不同品牌的电脑,处理与其它设备通讯的速度也有差异,而且还很大,比如串行通讯。

做自动控制的人,经常要在不同电脑间进行通讯程序的软件开发。

比如,在A、B、C三台电脑上进行串口通讯测试。通讯设置都一样,一个停止位,无奇偶校验位,波特率115200bps。你会发现,在A,B两台电脑上做好的通讯程序,在A、C电脑上运行时总是发生传输错误。

为什么会这样?这就是波特率计算误差问题。不同频率的电脑,计算所得的实际传输速率是有差异的,一个是115196bps,另一个可能是115236bps。

如何处理才能保证无虞?一是控制传输定时器的频率,二是增加传输数据桢检验。把不正确的去除掉。

总结:同样的程序,在不同电脑上执行结果不一样,这很正常,关键在于软件处理方法。产生的原因也非常多,与硬件的CPU有关,与操作系统有关,与使用的IDE开发工具有关。

对于整数之间的运算,计算机是相当精准的,一般不会有差异,但对于有协处理器参与的浮点运算,尤其是高精度的浮点运算,差异还是有的,所以ZERO阀值的设定显得尤为重要,能显示程序员的编程功力。


设计了一个程序,但是在自己电脑上运行结果不对,在别人电脑上运行是对的,是怎么回事? - 网络|
  • IT培训机构出身,不想包装简历,一切资料坦白,还能找到工作吗? - 网络|
  • IT培训机构出身,不想包装简历,一切资料坦白,还能找到工作吗? - 网络| | IT培训机构出身,不想包装简历,一切资料坦白,还能找到工作吗? - 网络| ...

    设计了一个程序,但是在自己电脑上运行结果不对,在别人电脑上运行是对的,是怎么回事? - 网络|
  • 我现在高二就开始自学java大一可以去实习吗? - 网络|
  • 我现在高二就开始自学java大一可以去实习吗? - 网络| | 我现在高二就开始自学java大一可以去实习吗? - 网络| ...

    设计了一个程序,但是在自己电脑上运行结果不对,在别人电脑上运行是对的,是怎么回事? - 网络|
  • 任正非说:学好数学很重要,我国需要数学家、物理学家、化学家,那文科生怎么办? - 网络|
  • 任正非说:学好数学很重要,我国需要数学家、物理学家、化学家,那文科生怎么办? - 网络| | 任正非说:学好数学很重要,我国需要数学家、物理学家、化学家,那文科生怎么办? - 网络| ...