如何在C中使用printf來顯示雙精度的全長。如何在C中使用printf顯示雙精度的全長
考慮
int main(){
double x = 0.00000000000001;
printf("x: %f \n", x);
}
結果我得到的是「我:0.000000」,但是從我讀%f是正確的格式說明和雙打應該有15-17顯著的數字,因此我不明白爲什麼我得到一個圓整的結果。我也嘗試過諸如%15f和%lf之類的東西。
我使用Ubuntu,如果有幫助。
如何在C中使用printf來顯示雙精度的全長。如何在C中使用printf顯示雙精度的全長
考慮
int main(){
double x = 0.00000000000001;
printf("x: %f \n", x);
}
結果我得到的是「我:0.000000」,但是從我讀%f是正確的格式說明和雙打應該有15-17顯著的數字,因此我不明白爲什麼我得到一個圓整的結果。我也嘗試過諸如%15f和%lf之類的東西。
我使用Ubuntu,如果有幫助。
http://linux.die.net/man/3/printf來自:
F,F
double參數是圓形的,並轉換爲十進制表示法中 樣式[ - ] ddd.ddd,其中數字的 小數點後數點字符等於精度規格。 如果 的精度缺失,則取爲6;如果精度爲 顯式爲零,則不會顯示小數點字符。如果出現小數點 點,則至少有一個數字出現在它之前。
如果你想在小數點後15位數字輸出,它應該是%.15f
而不是%15f
:
printf("i: %.15f \n", i);
使用,
printf("i: %.15f\n", i);
精密後小數點指定爲0.15。 「'後指定的號碼。是爲了精確。
您可以根據需要在%.<num>f
之後打印小數點後的位數。例如;
printf("i: %.15f \n", i);
它在小數點後打印15位數字。
希望它有幫助...
嘗試使用%g而不是%f。請參閱printf
規範。
,您可以管理的最好的是十六進制的打印
printf("i: %a \n", i);
http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html
一,A 表示浮點雙參數號碼應在手冊中轉換e「[ - ] 0xh。hhhhp±d「,其中在小數點前面有一個十六進制數字(如果參數是一個規範化的浮點數並且在其他情況下未指定,則該數字不爲零)和十六進制數字之後的十六進制數字等於精度;如果精度丟失且FLT_RADIX是2的冪,則精度應足以精確表示該值;如果精度丟失且FLT_RADIX不是2的冪,則精度應足夠區分double類型的值,除了尾部零可以省略;如果精度爲零並且未指定'#'標誌,則不會出現小數點字符,字符「abcdef」應用於轉換並且A轉換的字母「ABCDEF」A轉換說明符用'X'和'P'代替'x'和'p'產生一個數字,指數應該總是包含至少一個數字,並且只有更多的數字根據需要表示小數指數爲2.如果該值爲零,則指數應爲零。
表示無窮大或NaN的雙參數應以f或F轉換說明符的形式轉換。
閱讀有關[表示的數字,轉換和四捨五入(http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding)和[什麼每臺計算機科學家應該知道關於浮點算術](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 –
另外,另外:避免命名花車「我」;-)。即使在這個儘可能短的樣本中,它也是誤導性的,因爲它與一個已經成爲程序員基因庫的一部分的慣例相矛盾。 –
@對不起,我現在改變了。 – User