當前位置:首頁 » 編程語言 » pythonfloor

pythonfloor

發布時間: 2023-03-18 13:16:27

python Floor除法怎麼算

從Python2.2開始,增加了一個操作符 // ,以執行地板除://除法不管操作數為何種數值類型,總是會捨去小數部分,返回數字序列中比真正的商小的最接近的數字。

123456
>>>1//20>>>1.0//20>>>-1//2.0-1

❷ python3.5中的地板除問題

對最佳回答進行一些修改:在python3.X中利用/即可直接進行浮點運隱除法運算,即精確除法。而//的規則是:旁並廳先對被除數進蔽絕行四捨五入取整除數不動),然後運算除法,對運算結果進行無條件截斷,只保留到整數部分,小數點後不保留。這個類似floor(),所以也叫地板除。

#加粗部分為修改部分

❸ PYTHON里的負數求余是怎麼算的

在python中想搞清楚取余就要先搞清楚咐蔽謹整除

因為在python中取余遵循

a % b = a - (a // b) * b

那麼

r = m // n, 而且始終取下, 即math.floor(r),且同號正, 異號負, 5 // -3 = -2, 5 // 3 = 1

那麼, 令r = floor(a // b)

a > 0, b > 0, a - (a // b) * b = a - {取下值的正數, 故a > r * b} * b = 正數

a > 0, b < 0, a - (a // b) * b = a - {取下值衡基的負數, 故a < r * b} * b = 負數

a < 0, b > 0, a - (a // b) * b = a - {取下值的負數, 故a > r * b} * b = 正數

a < 0, b < 0, a - (a // b) * b = a - {取下值的正數, 故a < r * b} * b = 負數

所並棗以, 取余和被除數有關

❹ 為什麼Python中//和math.floor運算結果會不同

先說結論:這個問題是由於cpython的地板除運算符(//)的實現不是 浮點除清啟改法+floor 來實現而是用了(被除數 - 余數)/除數 導致的。

PS:Jython下可以得到20.0,而PEP里規定了a // b應該等於round(a/b),所以似乎這是cpython實現的一個bug?

首先先分析下1 / 0.05究竟應該等於多少。答案就是旁此精確的20.0。

簡單解釋下:IEEE754浮點數規定,如果一個浮點數的值不能被精確記錄,那麼它的值會被記成與這個數距離最近的可以被IEEE浮點數表示的數。
首先,0.05在二進制下是無限循環小數,自然不能被精確記錄,因此0.05這個浮點數的實際值是不等於0.05的,實際值是約為0.05 + 2.7e-18。
之後做浮點除法,實際上做的是1 / (0.05+2.7...e-18),這個除法的結果大約是20 - 1.1e-15。這個值也不能被精確表示,恰好離這個數最近的可以表示的值就是20.0,因此即使有浮點數誤差結果也是精確的20.0。
既然1/0.05就是20.0,那麼對他做floor運算自然也是20了。

現在的問題就是為什麼1 // 0.05會變成19.0,要解決這個問題只能翻源碼看//運算符的實現。
直接把cpython/floatobject.c at · python/cpython · GitHub 中實現//運算的一段貼上來答判:

static PyObject *
float_divmod(PyObject *v, PyObject *w)
{
double vx, wx;
double div, mod, floordiv;
CONVERT_TO_DOUBLE(v, vx);
CONVERT_TO_DOUBLE(w, wx);
if (wx == 0.0) {
PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
return NULL;
}
PyFPE_START_PROTECT("divmod", return 0)
mod = fmod(vx, wx);
/* fmod is typically exact, so vx-mod is *mathematically* an
exact multiple of wx. But this is fp arithmetic, and fp
vx - mod is an approximation; the result is that div may
not be an exact integral value after the division, although
it will always be very close to one.
*/
div = (vx - mod) / wx;
if (mod) {
/* ensure the remainder has the same sign as the denominator */
if ((wx < 0) != (mod < 0)) {
mod += wx;
div -= 1.0;
}
}
else {
/* the remainder is zero, and in the presence of signed zeroes
fmod returns different results across platforms; ensure
it has the same sign as the denominator. */
mod = sign(0.0, wx);
}
/* snap quotient to nearest integral value */
if (div) {
floordiv = floor(div);
if (div - floordiv > 0.5)
floordiv += 1.0;
}
else {
/* div is zero - get the same sign as the true quotient */
floordiv = sign(0.0, vx / wx); /* zero w/ sign of vx/wx */
}
PyFPE_END_PROTECT(floordiv)
return Py_BuildValue("(dd)", floordiv, mod);
}

可以發現cpython中x // y的實現實際上是

round((x - fmod(x, y)) / y)

,其中fmod函數是求兩個浮點數相除的余數。

這樣一來就解釋的通了:在十進制下,顯然1除以0.05的余數應該是0.0。然而在IEEE浮點數環境中,0.05的實際值是約0.05 + 2.7e-18,略大於0.05,這樣一來1除以這個數的余數就成了約0.05 - 5e-17,從1中減掉這么多之後就只剩0.95了,除以0.05再round後變成19.0。

❺ python裡面地板除法是什麼意思

// 稱為地板除,兩個整數的除法仍然是整數,它總是會捨去小數部分,返回數字序列中比真正的商小的,最接近的數字。
簡單來說就是求商。
兩個整數相除,返回整數
3 // 2
> 1
兩個數的區中一個是浮點數,返回浮點數
3 // 2.0
> 1.0
負數除以正整數是負數自己本身
-1 // 2.0
> -1
負數除以負整數是0
-1//-4
> 0

❻ Python中floor的用處(功能)是什麼

浮點型數據類型,也就是數學中的小數,它的精度可以通過print(sys.float_info)查看

❼ python中,取模運算是怎樣的

對於整型數a,b來說,取模運算或者求余運算的鍵悔方法都是:
1.求 整數商: c = a/b;
2.計算模或者余數: r = a - c*b.
求模運算和扒簡求余運算在第一步不同: 取余運算在取c的值時,向0 方向舍入(fix()函數);而取模運算在計算c的值時,向負無窮方向舍入(floor()函數)。
例如:計算-7 Mod 4
那麼:a = -7;b = 4;
第一步:求整數商c,如進行求模運算c = -2(向負無窮方向舍入),求余c = -1(向0方向舍入);
第二步:計算模和余數的公式相同,但因c的值不同,求模時r = 1,求余時r = -3。
歸納:當a和b符號春亮褲一致時,求模運算和求余運算所得的c的值一致,因此結果一致。
當符號不一致時,結果不一樣。求模運算結果的符號和b一致,求余運算結果的符號和a一致。
另外各個環境下%運算符的含義不同,比如c/c++,java 為取余,而python則為取模。

❽ python取模是什麼意思

Python中的旁祥取模運算符用於求余數。它通常寫作%,並用於計算兩個整數相除時的余數。例如,如果我們將9除以4,得到2,余數為1,因此9 % 4等於1。

>>> 9 % 4
1

在Python中,取模運算符可用於任何整數,包括正整數、負整數和0。例如,以下代碼演示了使用取模運算符來計算幾個負整數的余數:

>>>友燃 -9 % 4
3
>>> -8 % 3
2
>>>好啟虛 -7 % 2
1

❾ python中取整

定義:大於或等於 x 的最大整數 math.ceil(x)
向上取整運算為Ceiling,用數學符號⌈⌉表示

定義:小於或等於 x 的最大整數 math.floor(x)
向上取整運算為Floor,用數學符號⌊⌋表示

其實反斜杠 // 也能實現向下取整:

但是在某些情況下 // 和 math.floor(x) 的實現結果又不一樣:

還是因為浮點數在計算機中存儲值並不是0.05而是0.05...125,具體解釋還是看這里吧 為什麼Python中//和math.floor運算結果會不同 。

向0取整:x為負數時向上取整,x為正數時向下取整。
python中可用 int(x) 實現,也可以用 math.modf(x) 返回一個包含小數部分和整數部分的元組。

有人可能會對 math.modf(-2.36) 結果感到好奇,按理說它應該返回 (0.36, 2.00) 才對。這里涉及到了另一個問題,即浮點數在計算機中的表示,在計算機中是無法精確的表示小數的,至少目前的計算機做不到這一點。上例中最後的輸出結果只是 0.36 在計算中的近似表示。
Python和C一樣, 採用IEEE 754規范來存儲浮點數,更詳細解釋,可以參考知乎話題:
為什麼0.1+0.2=0.30000000000000004而1.1+2.2=3.3000000000000003

從官方文檔得知,Python中 round(x) 採用銀行進位法而非傳統的四捨五入。

銀行進位規則:
① 如果保留數最後一位不等於5,則執行四捨五入,例如 round(5.234, 2)=5.23 round(5.236, 2)=5.24
② 如果保留數最後一位等於5,則取決於5的位置和狀態:⑴ 如果5後有數,不論奇偶都要進位,例如 round(5.2354, 2)=5.24 ;⑵ 如果5後沒有數,則需要看5的前一位奇偶性,奇進偶舍,例如 round(5.235, 2)=5.24 , round(5.225, 2)=5.22
但是!注意!:

內心中一片烏鴉飛過,說好的奇進偶舍呢???其實我內心也是奔潰的,繼續找答案:
我們都知道,計算機所存儲的浮點數並不是表面這么簡單,他並不是一個精確值,可以用decimal模塊的Decimal對象,將float數據映射為底層的更精確的表示。:

round還是那個round,過錯就在於float對象「眼見而非實」上,那到底如何實現真正意義四捨五入呢??
decimal模塊是Python的一個標准庫,是專門為十進制小數的精確計算而設計的,使用decimal模塊的介面,可以實現小數精確的四捨五入,具體不多做展開了,可以參考官方文檔...暫時我也用不到decimal
一路寫下來,結論就是float心機好深,操作真的要小心點...

❿ python中如何進行開方運算

1、python中使用pow函數求n的n方根。首先打開python的編輯器,新建一個python 3的文件:

熱點內容
動態規劃01背包演算法 發布:2024-11-05 22:17:40 瀏覽:849
nasm編譯器如何安裝 發布:2024-11-05 22:01:13 瀏覽:178
登錄密碼在微信的哪裡 發布:2024-11-05 22:00:29 瀏覽:737
c防止反編譯工具 發布:2024-11-05 21:56:14 瀏覽:246
安卓虛擬機怎麼用 發布:2024-11-05 21:52:48 瀏覽:342
php時間搜索 發布:2024-11-05 20:58:36 瀏覽:478
燕山大學編譯原理期末考試題 發布:2024-11-05 20:13:54 瀏覽:527
華為電腦出現臨時伺服器 發布:2024-11-05 20:05:08 瀏覽:407
斗戰神免費挖礦腳本 發布:2024-11-05 19:53:25 瀏覽:664
網吧伺服器分別是什麼 發布:2024-11-05 19:45:32 瀏覽:391