[英]Modulo operator in Python
下面這段代碼中的模有什么作用?
from math import *
3.14 % 2 * pi
我們如何計算浮點數的模數?
當你有表達式時:
a % b = c
這真的意味着存在一個整數n
使c
盡可能小,但非負。
a - n*b = c
手動,您可以一次又一次地減去2
(如果您的數字是負數,則加2
),直到最終結果是可能的最小正數:
3.14 % 2
= 3.14 - 1 * 2
= 1.14
此外, 3.14 % 2 * pi
被解釋為(3.14 % 2) * pi
。 我不確定您是否打算寫3.14 % (2 * pi)
(在任何一種情況下,算法都是相同的。只需減/加,直到數字盡可能小)。
除了其他答案之外, fmod
文檔還有一些有趣的事情要說:
math.fmod(x, y)
返回
fmod(x, y)
,由平台 C 庫定義。 請注意,Python 表達式x % y
可能不會返回相同的結果。 C 標准的意圖是fmod(x, y)
恰好(數學上;無限精度)等於x - n*y
對於某個整數 n,使得結果與x
具有相同的符號並且幅度小於abs(y)
。 Python 的x % y
返回帶有y
符號的結果,並且對於浮點參數可能無法完全計算。 例如,fmod(-1e-100, 1e100)
是-1e-100
,但是 Python 的-1e-100 % 1e100
是1e100-1e-100
,它不能完全表示為浮點數,並且四舍五入到令人驚訝的1e100
。 出於這個原因,函數fmod()
在使用浮點數時通常是首選,而 Python 的x % y
在使用整數時是首選。
您對正常模數的期望相同.. 例如7 % 4 = 3
, 7.3 % 4.0 = 3.3
注意浮點精度問題。
與普通模數相同3.14 % 6.28 = 3.14
,就像3.14%4 =3.14
3.14%2 = 1.14
(余數...)
你應該使用 fmod(a,b)
While abs(x%y) < abs(y) is true
數學上While abs(x%y) < abs(y) is true
,但對於floats
,由於roundoff
,它在數值上可能不正確。
例如,假設在一個平台上,其一個Python float
是一個IEEE 754
雙精度數,為了使-1e-100 % 1e100
具有相同的符號1e100
,計算結果是-1e-100 + 1e100
,這是在數字上完全等於1e100
。
math 模塊中的函數fmod()
返回一個結果,其符號與第一個參數的符號匹配,因此在這種情況下返回-1e-100
。 哪種方法更合適取決於應用程序。
where x = a%b
用於整數模
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.