gpt4 book ai didi

C 可变参数函数 va_arg 返回错误的 double

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:26 25 4
gpt4 key购买 nike

所以我几乎完成了在 C 中重新实现 printf(3)(我不能使用任何可以为我转换的函数)。

现在我已经实现了所有的转换,当我将 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 获得了好的值(value)?

最佳答案

只需添加格式说明符,printf 可能会显示相同的问题:

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

原因是在我们的例子中,数字 100.1(大多数数字)没有精确的二进制表示。

关于C 可变参数函数 va_arg 返回错误的 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29219766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com