相关疑难解决方法(0)

如何打印浮点数的EXACT值?

首先,这不是浮点新手问题.我知道浮点运算的结果(更不用说超越函数)通常不能准确表示,并且大多数终止小数不能完全表示为二进制浮点数.

也就是说,每个可能的浮点值完全对应于一个二元有理数(一个有理数p/q,其中q是2的幂),而这又有一个精确的十进制表示.

我的问题是:你如何有效地找到这个精确的十进制表示?sprintf类似的函数通常只指定多个有效数字来唯一确定原始浮点值; 它们不一定打印精确的十进制表示.我知道我使用过的一种算法,但它很慢,指数O(e^2)在哪里e.这是一个大纲:

  1. 将尾数转换为十进制整数.你可以通过拉开这些位来直接读取尾数,或者你可以编写一个凌乱的浮点循环,首先将该值乘以2的幂,使其在1 <= x <10的范围内,然后拉通过转换为int,减去并乘以10,一次关闭一个数字.
  2. 通过重复乘以或除以2来应用指数.这是对您生成的十进制数字的操作.每次~3次乘法将在左侧添加一个额外的数字.每个单独的dividion将在右侧添加一个额外的数字.

这真的是最好的吗?我对此表示怀疑,但我不是浮点专家,我无法找到一种方法对数字的浮点表示进行基数10计算,而不会遇到不精确结果的可能性(乘以或除以除了你知道你有空闲位之外,除了2的幂之外的任何东西都是浮点数的有损操作.

c algorithm math floating-point

32
推荐指数
3
解决办法
8759
查看次数

标签 统计

algorithm ×1

c ×1

floating-point ×1

math ×1