回复:BUG? BUG? 我觉得应该算是BUG

伊默

西门子1847工业学习平台

  • 帖子

    4273
  • 精华

    118
  • 被关注

    220

论坛等级:至圣

注册时间:2003-10-24

白金 白金 如何晋级?

发布于 2019-12-13 11:04:13

11楼

不是BUG,的确是我的编程不够严谨。

考虑到浮点数的精度问题,即使后来我改成LREAL类型,也只是把问题掩盖了!


改成DINT_TO_INT(TRUNC(LN(UINT_TO_LREAL(SWAP(#iTemp)))/LN(LReal#2.0) +1.0E-9 )); 可能更能满足实际的应用需要。  这个可以涵盖32位双字的应用。


其实我的应用是求一个字或者双字内 某一个位为1的最高位数。  比如某个数为63,它的二进制为11 1111,通过该指令返回值为 5 (按照ZANE的想法使用ROUND则得到6, 我需要的是截尾取整,而不是简单地四舍五入)。


当然,最靠谱的办法就是用移位判断,但是程序啰嗦,16位字需要移16次,32位字需要移32次, 或者用二分位法。  但是都没有我这个指令来得简洁, 只是简洁过头了没有考虑到精度问题。

I can do it
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有11078条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。