Python中為什麼將浮點數賦值給變數,似乎可以直接使用 號進行比較?

時間 2021-06-02 09:12:51

1樓:邱昊宇

這玩意兒換成 C 也沒啥兩樣呀~

#include

#define print(v) printf("%s\n", (v) ? "True" : "False")

intmain

()編譯執行以後的輸出一模一樣。

自己把這些數換成二進位制然後保留 53 位有效數字算一算就知道了。那幾個可以用 == 判斷的,是因為左右兩邊真的相等。但是這種相等沒有規律可循,直接用 == 判斷總的來說還是不靠譜的。

double 的 0.2 + 0.3 真的就是 0.5

0.+ 00.

0. (放回 double 裡)

double 的 3.33 + 0.67 真的就是 4.0

11.+ 0100.

100. (放回 double 裡)

double 的 0.1 + 0.1 真的就是 0.2

0.+ 00.

0. (放回 double 裡)

vs 0. (0.2)

但 double 的 0.2 + 0.1 真的不等於 0.3(最後兩個位元位不同)

0.+ 00.

0. (放回 double 裡)

vs 0. (0.3)

p.s. 對,這種題我自己都快答吐了……這些二進位制怎麼來的請看 如何理解double精度丟失問題?

為什麼叫浮點數

道不輕傳 定點數能表示的數字有限,因為小數點固定,整數字和小數字就固定,就不利於表達特別大或特別小的數,浮點數就可以表示很大或很小的數字,因為小數點不固定,比如 123.45 用十進位制科學計數法可以表達為 1.2345 10 其中 1.2345 為尾數,10 為基數,2 為指數。浮點數利用指數達到...

浮點數的表示中為什麼要用移碼表示階碼?

如果偏移量為127 因此float型的取值範圍為 取值區間大致為 因此float型的取值範圍為 取值區間大致為 為了平衡浮點數精度與取值範圍 精度越大則取值範圍越小,精度越小則取值範圍越大 IEEE標準中,規定8位階碼的偏置為127,使得浮點數的取值範圍更大。 小伊莎 1 首先解釋為什麼要用移碼表示...

為什麼兩種浮點數型別的包裝類 Float,Double 並沒有實現常量池技術?

dwing 各種整數型別有常量池是因為valueOf根據引數定位常量池開銷很低.而浮點數就不一樣了,判斷乙個浮點數是否整數並轉換成整數相對來說並不快,所以valueOf索引到常量池有些開銷.當然如果自己有這方面需求完全可以自己建立Float,Double常量池,而且可以根據特定需求建立合適大小的池及...