c - C 中的舍入(math.h)无法正常工作

标签 c math.h

#include <stdio.h>
#include <math.h>

int main(){
  printf("Rounded value of 6*0.95*0.25 = %.2f\n", round(6*0.95*0.25*100)/100);
  printf("Rounded value of 1.425 = %.2f\n", round(1.425*100)/100);
}

我怀疑这与 double 和各自算术的准确性有关,但我如何解决这个问题(例如 6*0.95*0.25 即 1.425 将四舍五入到 1.43)我不知道.. ..

(我使用的是 GNU 编译器最新版本(1.7 左右))

感谢帮助

我正在尝试舍入为 2 d.p。

以下是输出:

舍入值 6*0.95*0.25 = 1.42
四舍五入后的值 1.425 = 1.43

( https://onlinegdb.com/r1ZtZ2lCW )

我要

舍入值 6*0.95*0.25 = 1.43
四舍五入后的值 1.425 = 1.43

最佳答案

math.h 中的舍入完全按照其应有的方式进行。当您为程序提供一个十进制数(例如 1.425)时,它会将其存储为该数字最接近的二进制表示形式。数字 1.425 = 57/40。由于 40 不是 2 的幂,因此该数字没有精确的二进制表示形式。在本例中,存储的数字略小于 1.425,因此该数字向下舍入。

阻止这种舍入差异的唯一通用解决方案是使用十进制浮点实现。除非硬件支持,否则这将比二进制浮点实现慢得多。

关于c - C 中的舍入(math.h)无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46975814/

相关文章:

c++ - IPC:在两个程序之间使用 C++ 中的命名管道

c - C语言中使用数组的Eratosthenes筛法

c++ - 无法使用 <math.h> 中的 C/C++ nextafter/nexttoward 函数获取下一个 32 位浮点值

c - 汇编 x86 中的 Math.h 库函数?

c - 如何在 C 中填充二维结构数组?

c - 如何在C中生成唯一的ID

c - 在 Linux 中查找链接到二进制文件的 SQLite 版本

c - 在 C 中扫描未知数量的输入并打印条形图

c - Ubuntu 上对 exp 的 undefined reference (包括 math.h 和与 -lm 的链接)

c - 在 C 中包含文件