我正在编写一个对 4 进制数字进行操作的程序。如何使数值更加准确?
我有一个十进制数字 0.668,我将其转换为以 4 为基数。它应该是 0.222300,但它存储为 0.222299,这会给出非常不准确的结果,因为它应该是一个以 4 为基数的数字。我读过有关浮点运算的内容,但我找不到提高c语言中数字精度的方法。我有 treid 使用 long double,但我找不到打印 long double 值的方法。 我不知道这是否重要,但我在 mingw 中使用代码块。
编辑: @EricPostpischil 已经回答了我的问题。
最佳答案
您似乎正在尝试使用“十进制编码的 base-4”格式。也就是说,给定一个以 4 为基数的数字 (.2223004),将其重新解释为十进制数字 (.22230010),然后存储该小数的数值float
或 double
中的数字。然后,由于您使用的 C 实现使用基于二进制的 float
或 double
,因此您最终会得到二进制表示形式,这当然会在从值转换时引入错误一个十进制数字。主要解决方案是:不要这样做。没有理由使用十进制。
由于您有 4 进制数字,因此只需将 4 进制数字粘贴到某些位中即可。选择一个无符号整数类型,并为每个 4 进制数字使用它的两个位。或者,如果必须使用浮点,则为每个 4 进制数字使用浮点的两个位。要以 float
或 double
表示 .2223004,请将 0 除以 4、加 0、除以 4、加 3、除以 4,加 2、除以 4、加 2、除以 4、加 2、除以 4。结果将是精确的,然后您可以在 float
或 double< 中进行原生算术运算
。然后,您只需要转换例程:一个用于将 4 进制数字转换为内部格式的输入,另一个用于将内部格式转换为 4 进制数字的输出。
关于c - 如何提高浮点值的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56476872/