關於 lf和 f的精度區別?

時間 2021-06-04 15:47:26

1樓:朱涵俊

printf只能傳double,如果傳float,會轉成double之後傳引數。

至於scanf,由於型別是double,就用lf。這個不是精度問題,而是格式問題。scanf是把字串變成浮點,如果用f,相當於直接把浮點資料當成double使用,這樣肯定是亂的。

這個不像整形,short跟int的低位是一致的,float轉double不是說把float值變成double的低32位。

2樓:暮無井見鈴

POJ 上的編譯器都未開啟 C99/C++11 的支援……

C99/C++11 的 printf 裡用 %lf 效果和 %f 一樣,之前版本的 printf 裡用 %lf 是錯的。

這個 C99 特性有的編譯器擴充套件到了舊版本,有的沒有。

3樓:冒泡

實際上printf中的%f格式,是不需要「l」字首的,簡單說就是%f匹配double的輸出

那為啥float也可以匹配呢,因為printf後面是可變引數域(就是宣告中的「...」),往這個地方傳遞float型別的值,會自動提公升為double

而有的編譯器是認%lf的輸出格式的,主要是相容一些習慣,但printf的文件裡是沒有的,即「l」字首並不能應用於f(以及類似f的浮點數的輸出格式,e/E或g/G這種)

但並不是所有編譯器都這麼支援,嚴格點還是用%f好

4樓:OhYee

scanf函式是通過指標指向變數的。

%f告訴scanf函式在所傳位址位置上儲存乙個float型值, 而%lf告訴scanf函式在所傳位址位置上儲存乙個double型值。

這裡float和double的區別是非常重要的。

如果給出了錯誤的轉換說明,那麼scanf函式將可能儲存錯誤的位元組數量 (沒有提到的是,float型的為模式可能不同於double型的位模式)。

Taku ——SegmentFault上的回答

因此,當輸入時必須使用 %lf 來確保資料被正確儲存為了方便使用者,很多編譯器默許了常見的錯誤,當使用 printf("%lf",a) 時,若a為 double 變數,編譯器會自動把其修改為 %f

而LLVM會警告並推薦修改為 %f 。

printf() 函式中不存在 %lf ,輸入 double 用 %lf 輸出用 %f

C語言雙精度和單精度的比較問題?

廣土 while 是先判斷再執行。當迴圈到最後一次的時候,在迴圈之前a確實比2小,所以執行。一旦執行,a就自己加上0.2,這時已超過2了。再次到while判斷 已不符合迴圈條件,於是迴圈結束。繼續執行輸出,此時a剛好超過2.0. hh lee double使用64bit表示浮點數,能表示的就是2 6...

關於日語副詞後接 和 的區別?

笑笑 個人觀點 日語裡的副詞和名詞是同一種詞性的兩個側面 和 是強化特定體言副詞性的格助詞 強化的意思是不加上去也能構成不嚴謹的句子 與意義弱化的形式動詞 組合成了不同的活用形,發展至今 現代語中的連用連體形大致上有 以下按照這兩種格助詞的搭配對體言集合 稍作分類 大部分漢語詞 結尾的和語詞 小部分...

請問祿萊2 8F和3 5F除了半檔光圈的區別之外還有什麼區別?

回覆樓上關於印集的問題 印集的機子確實幾乎都是新機或接近新機,然而不能避免新機就沒有問題。一下是他家P頭17000元和X頭2萬 很明顯可以看出P頭2.8幾乎前兩組鍍膜都有問題 當然不排除拍攝問題 不能用 你買過嗎?來懟別人,就好像見過很多玉石收藏的人往往比有幾件玉器的人更懂。希望大家認真鑑別。印集可...