繁体   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