為什麼負數的取餘計算各個程式語言結果不統一?

時間 2021-06-21 13:58:48

1樓:譚耀程

問題的關鍵在於商是向負無窮取值還是向0取值 -7/10=0....-7

or -7/10=-1....3

其他語言我不清楚,貌似c11規定向0取值

2樓:

就算是相同語言不同編譯器也會不一樣的。

在我發現這個問題之後,每當我更新IDE/編譯器的時候都會用我的測試程式跑一遍,看看是不是和上個版本有什麼不同。

有的時候一些小改動很坑的。

PS:有時候也不行,不能保證測試結果是唯一的。

3樓:

說的好像各個程式語言內部是統一的一樣。。

請題主先把cl、gcc、clang、cmake、tc等實現的各主要版本都實驗一遍。。

4樓:tefx

數學上都正確,這個定義本來就有好幾個

比如按或者按

IEEE標準是則是,然而round標準也有好幾個。。。

如果round是IEEE預設的round to the nearest,從標準的角度似乎應該是3。。。但IEEE好像也沒說其他的round標準不對。。。

PS:很多語言乾脆提供了兩個函式,rem和mod

程式語言中的取余是如何實現的

各種語言裡面的演算法不完全一樣。有的語言支援任意精度整數,難道它也用跟C同樣的演算法計算餘數?另外各種語言裡面關於負數的處理也不一樣。對於除數固定 編譯時已知 的取餘操作,編譯器完全可以把它優化掉,具體優化成什麼,你隨便拿個C編譯器試試就知道了。特別對於Hash表這種,使用2的整數冪大小還是比較常見...

如何想自學計算機程式設計,有什麼程式語言的意見?

雲鶴 想學程式設計,你要知道你學程式設計是來幹嘛的,並且你需要對計算機程式設計術語有基本的了解。對任何一種程式語言有基本的了解將有助於您理解程式設計概念,並有助於加快您的學習進度。Python語言語法簡潔易學,用途廣泛,可移植性強,底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,執行...

為什麼很多程式無法計算負數的立方根?

賀師俊 因為大多數程式語言的浮點數格式和相關運算遵循 IEEE 754 標準。IEEE 754 規定了 pow x,y 運算在 x 為 finite 即不是正負無窮大和NaN 且 x 0,而 y 是 finite 且不是整數時,返回 NaN。由於 IEEE 754 標準文字是需要收費購買的,所以我也...