簡體   English   中英

C變量函數va_arg返回錯誤的雙精度

[英]C variadic functions va_arg returns wrong double precision

所以我幾乎做了重新實現printf(3)我不能使用任何功能會為我的轉化)的C

現在我已經實現了所有的轉換,我看到了一些奇怪的東西,當我通過我的函數一個double使用說%g100.10然后va_arg給我100.09999999999999所以當然我的轉換然后給我一個100.099999的字符串。

我像這樣取雙:

double d = (double)(va_arg(args, double));

而我正在調用這兩個函數:

double testd = 100.10;
my_printf("%g", testd); #=> 100.099999
printf("%g", testd); #=> 100.1

認為知道這個值是錯誤的,因為當我逐步完成程序時,我看到double d = 100.09999999999999

我應該采用不同的方式嗎? 因為真正的printf似乎得到了正確的值。

編輯:

printf("%#.10g\n", testd); #=> 100.1000000000

這是因為四舍五入還是真正的printf可能獲得了良好的價值?

只需添加格式說明符, printf可能會顯示相同的問題:

printf("%0.20g\n", d); // 100.09999999999999 on my system

原因是在我們的例子中,數字100.1 (大多數數字)沒有精確的二進制表示。

暫無
暫無

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

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