首頁 > 後端開發 > C++ > 為什麼 C 中的模數不適用於非整數?

為什麼 C 中的模數不適用於非整數?

DDD
發布: 2024-12-18 12:16:10
原創
459 人瀏覽過

Why Doesn't Modulus Work with Non-Integers in C?

為什麼模除法對於非整數會失敗

在數學中,模除法(用模運算子整數除以另一個整數,有效地將結果「環繞」到指定範圍。然而,在 C 等程式語言中,此操作不適用於非整數運算元,從而導致錯誤。

理解整數的餘數

對於整數,餘數運算具有直覺意義。例如,當 13 除以 5 時,商數為 2,餘數為 3。這是因為 5 正好可以兩次剛好契合 13,剩下 3。

擴展到 Real數字

將餘數的概念擴展到浮點數,或更普遍的實數,會帶來複雜性。考慮 5.2 除以 2.3。從數學角度來看,結果約為 2.2609。但是,如果我們直接將模運算子應用於運算元,則會得到不同的結果。

在 C 中,5.2 % 2.3 會導致編譯器錯誤,因為操作數不是整數。這是因為 C 標準沒有定義計算實數整數商的混合運算。

標準函式庫函數

為了解決這個問題,C 標準函式庫提供了兩個函式:fmod和remaining。

  • fmod:計算浮點除法的餘數,但不遵循整數除法的捨入規則。
  • 餘數: C99 中引入,它在遵循整數除法舍入的同時計算餘數

要解決給定程式碼範例中的問題,我們可以使用fmod函數:

#include <math.h>

float sin(float x){
    return limited_sin(fmod((x + M_PI), (2 *M_PI)) - M_PI);
}
登入後複製

請注意,fmod函數期望其運算元具有相同類型,因此如果需要,我們需要將它們轉換為 double。

以上是為什麼 C 中的模數不適用於非整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板