簡體   English   中英

C浮點和雙重比較

[英]C float and double comparisons

我正在比較C中的簡單浮點數和雙精度數,特別是它們的值8.7。 現在,我為每個變量分配8.7,在打印時,兩個值的結果均為8.7000。 為什么編譯器添加了這些零。 我想問的主要問題是,還有其他我看不到的數字,例如隱藏在尾隨零后面的數字。 我讀到,由於缺乏精度,我不應該對float進行這樣的比較,但是我認為,以如此小的值,它肯定可以存儲8.7,並將其自身與另一個8.7值進行比較所需的精度如何?

我唯一擔心的是它實際上在內存中的某個位置表示為8.70000003758之類的東西,這使我無法進行比較了嗎? 我嘗試使用%.20f進行printf,以查看可能隱藏的其他任何數字,但我認為只是創建了一些數字,否則這些數字將不存在,因為數字的整體精度更改為8.6918734634834929或類似的數字。

我正在比較C中的簡單浮點數和雙精度數,特別是它們的值8.7。

錯誤的選擇,因為8.7沒有確切的二進制表示形式。

現在,我為每個變量分配8.7,在打印時,兩個值的結果均為8.7000。 為什么編譯器添加了這些零。

它沒有,您的打印例程有。

我想問的主要問題是,還有其他我看不到的數字,例如隱藏在尾隨零后面的數字。

絕對可以,因為8.7沒有確切的二進制表示形式。 (嘗試將其寫為2的整數次冪之和,但不能這樣做。)

我讀到,由於缺乏精度,我不應該對float進行這樣的比較,但是我認為,以如此小的值,它肯定可以存儲8.7,並將其自身與另一個8.7值進行比較所需的精度如何?

你錯了 1/3很小,但沒有精確的十進制表示形式,且位數有限。 值的大小與在特定基數中是否可以用有限數量的數字精確表示無關。

我唯一擔心的是它實際上在內存中的某個位置表示為8.70000003758之類的東西,這使我無法進行比較了嗎?

確實,就像代表0.333333333 1/3一樣。

我嘗試使用%.20f進行printf,以查看可能隱藏的其他任何數字,但我認為只是創建了一些數字,否則這些數字將不存在,因為數字的整體精度更改為8.6918734634834929或類似的數字。

那可能只是一個錯誤。 向我們展示該代碼。 也許您試圖輸出一個double並忽略了l

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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