posts - 134,comments - 22,trackbacks - 0
          《高效程序的奧秘》(Henry S.Warren,Jr.著)第9章“整數除法”中說:
              除法運算是一個復雜的過程,含有除法的算法通常都不很精巧。甚至連如何定義整數除法都是一個值得研究的問題。大多數高級語言和大多數計算指令集將其定義為有理數結果的向零截取。這一定義以及其他兩種可能的定義敘述如下:
              --------- ---截取-- ---模--- --地板--
               7 /  3 =  2 余   2 余 1   2 余  1
              -7 /  3 = -2 余 -1  -3 余 2  -3 余  2
               7 / -3 = -2 余  -2 余 1  -3 余 -2
              -7 / -3 =  2 余 -1   3 余 2   2 余 -1
              --------- --------- -------- --------

              對于所有三種可能的定義,關系“被除數=商×除數+余數”都成立。在定義“模”(modulus)除法時,要求余數是非負數。在定義“地板”(floor)除法時,要求商是有理數除法的結果的“地板”。對于除數是正的情況,模除法和地板除法等價。很少使用的第四種可能定義是向最接近的整數舍入。
              所以,“裝配腦袋”所說的“數學上規定”實際上是指“地板”除法。而現有的高級語言(如C、C++、C#、Java、Fortran、Ada、Pascal等)大多數都使用“截取”除法,IBM的PL.8語言使用“模”除法,Knuth的MMIX計算機的除指令使用“地板”除法。
              [C#語言規范 7.7.2]中說:(整數)除法將結果舍入到零,并且結果的絕對值是小于兩個操作數的商的絕對值的最大可能整數。當兩個操作數符號相同時,結果為零或正;當兩個操作數符號相反時,結果為零或負。
          posted on 2009-04-12 16:30 何克勤 閱讀(613) 評論(0)  編輯  收藏 所屬分類: 其他
          主站蜘蛛池模板: 饶平县| 金沙县| 长丰县| 莒南县| 诸城市| 东阳市| 沐川县| 修文县| 舟曲县| 额济纳旗| 襄城县| 通城县| 米林县| 荃湾区| 东乌珠穆沁旗| 裕民县| 乌鲁木齐市| 潍坊市| 韶山市| 舒兰市| 海城市| 军事| 叙永县| 蓬溪县| 鸡东县| 富顺县| 武乡县| 贵阳市| 襄垣县| 曲靖市| 调兵山市| 略阳县| 乾安县| 涟源市| 高台县| 全南县| 赤水市| 石屏县| 自贡市| 张家界市| 隆昌县|