第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

保持浮點(diǎn)值精度的Printf寬度說明符

保持浮點(diǎn)值精度的Printf寬度說明符

開心每一天1111 2019-06-11 13:10:23
保持浮點(diǎn)值精度的Printf寬度說明符有沒有printf寬度說明符,可應(yīng)用于浮點(diǎn)說明符,該說明符將自動將輸出格式化為所需的有效數(shù)字這樣,當(dāng)掃描返回字符串時,獲取原始浮點(diǎn)值?例如,假設(shè)我打印一個float精確到2小數(shù)位:float foobar = 0.9375;printf("%.2f", foobar);    // prints out 0.94當(dāng)我掃描輸出時0.94,我沒有符合標(biāo)準(zhǔn)的保證,我會得到原來的0.9375浮點(diǎn)值返回(在本例中,我可能不會)。我想找個方法告訴你printf將浮點(diǎn)值自動打印到所需的有效數(shù)字以確??梢詫⑵鋻呙杌貍鬟f給printf.我可以使用一些宏float.h到求出最大寬度傳給printf,但是是否已經(jīng)有一個說明符可以自動打印到所需的有效數(shù)字-或者至少達(dá)到最大寬度?
查看完整描述

3 回答

?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊

十六進(jìn)制解決方案:使用%a。

OP想要“具有最大精度的打印(或至少到最重要的十進(jìn)制)”。

一個簡單的例子是打印七分之一,如下所示:

#include <float.h>int Digs = DECIMAL_DIG;double OneSeventh = 1.0/7.0;printf("%.*e\n", Digs, OneSeventh);// 1.428571428571428492127e-01

但讓我們深入挖掘.。

數(shù)學(xué)上,答案是“0.142857 142857 142857.”,但我們使用的是有限精度浮點(diǎn)數(shù)。讓我們假設(shè)IEEE 754雙精度二進(jìn)制..所以OneSeventh = 1.0/7.0結(jié)果如下所示。還顯示了前面和下面的可表示double浮點(diǎn)數(shù)。

OneSeventh before = 0.1428571428571428 214571170656199683435261249542236328125OneSeventh        
= 0.1428571428571428 49212692681248881854116916656494140625OneSeventh after  = 0.1428571428571428 769682682968777953647077083587646484375

打印精確性的十進(jìn)制表示double用途有限。

C中有兩個宏家族。<float.h>幫助我們。
第一組是顯著用十進(jìn)制字串打印的數(shù)字,所以當(dāng)掃描返回字符串時,我們得到原始浮點(diǎn)數(shù)。這里顯示的是C規(guī)范最小值價值和a樣本c11編譯器

FLT_DECIMAL_DIG   6,  9 (float)                           (C11)DBL_DECIMAL_DIG  10, 17 (double)                    
      (C11)LDBL_DECIMAL_DIG 10, 21 (long double)                     (C11)DECIMAL_DIG      
      10, 21 (widest supported floating type)  (C99)

第二組是顯著數(shù)字字符串可以掃描成浮點(diǎn),然后打印FP,仍然保留相同的字符串表示形式。這里顯示的是C規(guī)范最小值價值和a樣本c11編譯器我相信在C99之前就有了。

FLT_DIG   6, 6 (float)DBL_DIG  10, 15 (double)LDBL_DIG 10, 18 (long double)

第一組宏似乎符合OP的目標(biāo)顯著數(shù)字。但那并不總是可用的。

#ifdef DBL_DECIMAL_DIG  #define OP_DBL_Digs (DBL_DECIMAL_DIG)#else  
  #ifdef DECIMAL_DIG    #define OP_DBL_Digs (DECIMAL_DIG)
  #else  
    #define OP_DBL_Digs (DBL_DIG + 3)
  #endif#endif

“+3”是我先前回答的關(guān)鍵。如果知道往返轉(zhuǎn)換字符串-fp-string(SET#2宏可用C89),那么如何確定fp-string-fp(SET#1宏可用后C89)的數(shù)字?總的來說,Add 3就是結(jié)果。

現(xiàn)在有多少顯著要打印的數(shù)字是已知的,并通過<float.h>.

打印N顯著十進(jìn)制數(shù)字可以使用各種格式。

帶著"%e",精密度字段是數(shù)字的數(shù)目。領(lǐng)頭數(shù)字和小數(shù)點(diǎn)。所以- 1是合乎情理的。注:此-1 is not in the initialINDIG=十進(jìn)制_DIG;

printf("%.*e\n", OP_DBL_Digs - 1, OneSeventh);// 1.4285714285714285e-01

帶著"%f",精密度字段是數(shù)字的數(shù)目。小數(shù)點(diǎn)。像這樣的數(shù)字OneSeventh/1000000.0,一個人需要OP_DBL_Digs + 6去看所有的顯著數(shù)字。

printf("%.*f\n", OP_DBL_Digs    , OneSeventh);// 0.14285714285714285printf("%.*f\n", OP_DBL_Digs + 6, OneSeventh/1000000.0);
// 0.00000014285714285714285

注:許多人習(xí)慣于"%f"..它在小數(shù)點(diǎn)之后顯示6位數(shù)字;6是顯示默認(rèn)值,而不是數(shù)字的精度。


查看完整回答
反對 回復(fù) 2019-06-11
?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個贊

不丟失地打印浮點(diǎn)數(shù)的簡短答案(因此可以將它們讀回完全相同的數(shù)字,但NaN和Infinity除外):

  • 如果您的類型是浮動的:使用

    printf("%.9g", number).

  • 如果您的類型是雙重的:使用

    printf("%.17g", number).

不使用%f,因?yàn)檫@僅指定小數(shù)之后的有效位數(shù),并將截斷小數(shù)字。作為參考,魔幻數(shù)字9和17可以在float.h它定義了FLT_DECIMAL_DIGDBL_DECIMAL_DIG.


查看完整回答
反對 回復(fù) 2019-06-11
?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個贊

如果您只對位(resp十六進(jìn)制模式)感興趣,則可以使用%a格式。這保證你:

如果存在基2中的精確表示,并且在其他情況下足夠大,足以區(qū)分類型Double的值,則默認(rèn)精度就足以表示值的精確表示。

我必須補(bǔ)充一點(diǎn),這是只有在C99之后才能使用的。


查看完整回答
反對 回復(fù) 2019-06-11
  • 3 回答
  • 0 關(guān)注
  • 811 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號