当前位置:  开发笔记 > 编程语言 > 正文

为什么(x-(x/y)*y)的评估与x%y相同?

如何解决《为什么(x-(x/y)*y)的评估与x%y相同?》经验,为你挑选了1个好方法。

原因在于/操作员如何使用特定类型.

除法运算x/y作为整数除法执行,因为两个操作数都是整数类型.因此,结果值具有截断的小数部分.

因此,乘以该结果y将不一定x与截断结果值相同.这个结果和之间的区别xx%y.

根据C标准第6.5.5节:

6 当整数被划分时,/运算符的结果是代数商,丢弃任何小数部分. 如果商a/b是可表示的, 则表达式(a/b)*b + a%b 应相等a ; 否则,双方的行为a/ba%b 不确定.

因此标准明确规定这种平等成立.

如果除法的任一操作数是浮点类型,则x-(x/y)*y由于浮点运算的不精确性,它将始终为0或非常接近0的值.



1> dbush..:

原因在于/操作员如何使用特定类型.

除法运算x/y作为整数除法执行,因为两个操作数都是整数类型.因此,结果值具有截断的小数部分.

因此,乘以该结果y将不一定x与截断结果值相同.这个结果和之间的区别xx%y.

根据C标准第6.5.5节:

6 当整数被划分时,/运算符的结果是代数商,丢弃任何小数部分. 如果商a/b是可表示的, 则表达式(a/b)*b + a%b 应相等a ; 否则,双方的行为a/ba%b 不确定.

因此标准明确规定这种平等成立.

如果除法的任一操作数是浮点类型,则x-(x/y)*y由于浮点运算的不精确性,它将始终为0或非常接近0的值.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有