c - 如何提高浮点值的精度?

标签 c floating-point

我正在编写一个对 4 进制数字进行操作的程序。如何使数值更加准确?

我有一个十进制数字 0.668,我将其转换为以 4 为基数。它应该是 0.222300,但它存储为 0.222299,这会给出非常不准确的结果,因为它应该是一个以 4 为基数的数字。我读过有关浮点运算的内容,但我找不到提高c语言中数字精度的方法。我有 treid 使用 long double,但我找不到打印 long double 值的方法。 我不知道这是否重要,但我在 mingw 中使用代码块。

编辑: @EricPostpischil 已经回答了我的问题。

最佳答案

您似乎正在尝试使用“十进制编码的 base-4”格式。也就是说,给定一个以 4 为基数的数字 (.2223004),将其重新解释为十进制数字 (.22230010),然后存储该小数的数值floatdouble 中的数字。然后,由于您使用的 C 实现使用基于二进制的 floatdouble,因此您最终会得到二进制表示形式,这当然会在从值转换时引入错误一个十进制数字。主要解决方案是:不要这样做。没有理由使用十进制。

由于您有 4 进制数字,因此只需将 4 进制数字粘贴到某些位中即可。选择一个无符号整数类型,并为每个 4 进制数字使用它的两个位。或者,如果必须使用浮点,则为每个 4 进制数字使用浮点的两个位。要以 floatdouble 表示 .2223004,请将 0 除以 4、加 0、除以 4、加 3、除以 4,加 2、除以 4、加 2、除以 4、加 2、除以 4。结果将是精确的,然后您可以在 floatdouble< 中进行原生算术运算。然后,您只需要转换例程:一个用于将 4 进制数字转换为内部格式的输入,另一个用于将内部格式转换为 4 进制数字的输出。

关于c - 如何提高浮点值的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56476872/

相关文章:

c - 为什么编译器假定 malloc 返回一个 int?

c - C 可以用多种浮点格式求值吗?

python-3.x - 如何将浮点转换为任何浮点的 XE-Y 表示

c - 为什么有多个C函数用于不区分大小写的比较

c - Audio API 适用于windows多声道播放

颜色命令无法使用 c 中的 system() 函数

c - 当我使用 float 时,如果我限制范围,我会失去精度吗?

c - 使用非标准名称链接 C 库

将 unsigned long long 转换为 float 并丢失精度

javascript - 如何在 JavaScript 中将字符串转换为数字并确保浮点类型?