首页 > 解决方案 > 如何提高浮点值的准确性?

问题描述

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

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

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

标签: cfloating-point

解决方案


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

由于您有以 4 为基数的数字,因此只需将以 4 为基数的数字粘贴在某些位中即可。选择一个无符号整数类型,并为每个基数为 4 的数字使用其中的两个位。或者,如果您必须使用浮点,则为每个以 4 为基数的数字使用其中的两个位。用or表示 .222300 4,用 0 除以 4,加 0,除以 4,加 3,除以 4,加 2,除以 4,加 2,除以 4,加 2,除以 4。结果将是准确的,然后您可以在or中本地进行算术运算。然后你只需要转换例程:一个用于将base-4 数字转换为内部格式的输入,一个用于将内部格式转换为base-4 数字的输出。floatdoublefloatdouble


推荐阅读