[英]C variadic functions va_arg returns wrong double precision
所以我幾乎做了重新實現printf(3)
我不能使用任何功能會為我的轉化)的C
。
現在我已經實現了所有的轉換,我看到了一些奇怪的東西,當我通過我的函數一個double
使用說%g
像100.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.