日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c语言float判断相等,c/c++ 比较两个浮点数相等

發布時間:2025/3/12 c/c++ 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言float判断相等,c/c++ 比较两个浮点数相等 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,兩個 if 是一樣的。浮點數和整數比較時,整數被轉為浮點數。

然后,i 為什么不等于 10.0?因為它只會等于這些值:

>>> def gen():

... i = 0

... while i < 10:

... i += 0.1

... yield i

...

>>> L = list(gen())

>>> L

[0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999, 1.0999999999999999, 1.2, 1.3, 1.4000000000000001, 1.5000000000000002, 1.6000000000000003, 1.7000000000000004, 1.8000000000000005, 1.9000000000000006, 2.0000000000000004, 2.1000000000000005, 2.2000000000000006, 2.3000000000000007, 2.400000000000001, 2.500000000000001, 2.600000000000001, 2.700000000000001, 2.800000000000001, 2.9000000000000012, 3.0000000000000013, 3.1000000000000014, 3.2000000000000015, 3.3000000000000016, 3.4000000000000017, 3.5000000000000018, 3.600000000000002, 3.700000000000002, 3.800000000000002, 3.900000000000002, 4.000000000000002, 4.100000000000001, 4.200000000000001, 4.300000000000001, 4.4, 4.5, 4.6, 4.699999999999999, 4.799999999999999, 4.899999999999999, 4.999999999999998, 5.099999999999998, 5.1999999999999975, 5.299999999999997, 5.399999999999997, 5.4999999999999964, 5.599999999999996, 5.699999999999996, 5.799999999999995, 5.899999999999995, 5.999999999999995, 6.099999999999994, 6.199999999999994, 6.299999999999994, 6.399999999999993, 6.499999999999993, 6.5999999999999925, 6.699999999999992, 6.799999999999992, 6.8999999999999915, 6.999999999999991, 7.099999999999991, 7.19999999999999, 7.29999999999999, 7.39999999999999, 7.499999999999989, 7.599999999999989, 7.699999999999989, 7.799999999999988, 7.899999999999988, 7.999999999999988, 8.099999999999987, 8.199999999999987, 8.299999999999986, 8.399999999999986, 8.499999999999986, 8.599999999999985, 8.699999999999985, 8.799999999999985, 8.899999999999984, 8.999999999999984, 9.099999999999984, 9.199999999999983, 9.299999999999983, 9.399999999999983, 9.499999999999982, 9.599999999999982, 9.699999999999982, 9.799999999999981, 9.89999999999998, 9.99999999999998, 10.09999999999998]

你可以看到,浮點數十進制轉二進制有誤差。100 次誤差積累之后,i 只會等于 9.99999999999998。(我使用的是 Python 3.6,浮點數的十進制表示會采用等價表示法中最短的。它也是采用與 C 語言相同的內部表示。)

浮點數在計算機中是以二進制形式表示和運算的(通常使用 IEEE 754 標準),而 0.1 不能精確地用二進制來表示(是循環小數;只有分母只包含因子 2 的小數,使用二進制表示時才不會循環)。這樣一來就會有誤差。誤差積累之下,它會就偏離十進制越來越遠。

如果你需要比較相等性,可以與指定的數求差,如果差值小于特定值(比如 Python 里有 math.isclose 函數),就認為相等。

如果你需要精確值(比如做金融計算,一分錢也不能少的那種),你可以使用所謂的「十進制數」來運算(decimal,Python 和 Ruby 都支持的。也可以使用 mpdecimal 庫),或者指定精度(比如使用 mpfr 庫),或者使用定點數。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的c语言float判断相等,c/c++ 比较两个浮点数相等的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。