rla*_*la4 4 compiler-construction haskell truncate
我想知道从编程语言/编译器实现的角度来看,使用截断到负无穷大(Haskell,Ruby)而不是截断到零(C,PHP)的好处是什么.
看起来向负无穷大的截断是正确的方法,但我没有找到这种声明的可靠来源,也没有找到这样的决定如何影响编译器的实现.我对可能的编译器优化特别感兴趣,但不是唯一的.
相关来源:
这些实际上甚至不是唯一的选择,事实上,通常甚至可能不是最好的选择.我可以在这里总结一下,但最好只链接到这篇与truncate,floor和Euclidean部门形成对比的优秀论文,涵盖理论和一些现实世界的应用,函数的欧几里德定义div和mod,Raymond T. Boute.
这里引用了 ISO/IEC 10967-1:2012语言无关算术(vl. LIA-1) C.5.1.2.2附录 C 中的(信息性)基本原理。省略号...由我插入。
... 两种舍入规则是常用的:向负无穷大(quot I)舍入,向零舍入。后者在 LIA-1 中没有指定,因为当参数具有不同的符号时容易错误使用。例如,
quot I (-3,2) = -2 向负无穷大舍入,在 LIA-1 中指定
div t I (-3,2) = -1 向零舍入,不再由 LIA 的任何部分指定
quot I ...以及...都满足一个广泛有用的翻译不变量:
quot I ( x + i * y , y) = quot I ( x , y ) + i 如果y ? 0,不发生溢出
... quot I是许多数学家首选的整数除法形式。div t I(LIA 不再指定)是 Fortran 引入的除法形式。
整数除法经常用于分组。例如,如果要将一系列索引项划分为n 个项目的组,则将 item
i
放入 group是很自然的i/n
。如果quot I用于整数除法,这会很好用。但是,如果使用div t I(不再在 LIA 中指定)并且i
可以为负数,则组 0 将获得 2 ?n -1 项而不是所需的n。否定的这种不均匀行为i
会导致微妙的程序错误,并且是反对使用div t I ...
归档时间: |
|
查看次数: |
1211 次 |
最近记录: |