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