簡體   English   中英

Python 中的模運算符

[英]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 % 1e1001e100-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM