gpt4 book ai didi

c - 将两个 float 相乘并不能给出准确的结果

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

我正在尝试将两个 float 相乘,如下所示:

float number1 = 321.12;
float number2 = 345.34;
float rexsult = number1 * number2;

我想看到的结果是 110895.582,但是当我运行代码时它只给我 110896。大多数时候我遇到这个问题。任何计算器都会给我所有小数点的精确结果。我怎样才能达到那个结果?

编辑:它是 C 代码。我正在使用 XCode iOS 模拟器。

最佳答案

正在进行大量舍入。

float a = 321.12; // this number will be rounded
float b = 345.34; // this number will also be rounded
float r = a * b; // and this number will be rounded too
printf("%.15f\n", r);

在三个单独的舍入之后,我得到 110895.578125000000000。

  1. 如果您想要超过 6 位十进制数字的精度,您将必须使用double而不是 float . (请注意,我说的是“十进制数字的值(value)”,因为你没有得到十进制数字,你得到的是二进制。)就目前而言,1/2 ULP 的错误(完美 四舍五入的结果)约为 0.004。

  2. 如果您想要精确四舍五入的十进制数,则必须使用专门的十进制库来完成此类任务。 double对科学家来说已经足够精确了,但如果你和钱打交道,一切都必须 100% 准确。金钱没有 float 。

与整数不同, float 需要一些实际工作才能让您习惯它们的陷阱。请参阅“What Every Computer Scientist Should Know About Floating-Point Arithmetic”,这是该主题的经典介绍。

编辑:实际上,我不确定代码是否进行了三轮处理。它可能四舍五入 5 次,因为 a 的常量和 b存储时可能首先舍入为 double ,然后舍入为单精度。但是我不是很了解这部分C的规则。

关于c - 将两个 float 相乘并不能给出准确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11381905/

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