2012-09-27 64 views
0

可能重复:
How to convert floats to human-readable fractions?计算最近的浮点值

我有一个浮点值说0.595781,我想用商使用,以获得尽可能接近地只有整数分子和分母的值都在0 to 1023 (10-bits)的范围内。

这样做的直观方式(至少开始)将使用595/1000,它提供0.555一个相当接近的匹配(错误是0.040781)。

但有一个更好的匹配597/1002这是0.595808(错误0.0000273)。也可能有更好的比赛。我以不可思议的方式玩弄接近它们原始值的分子和分母值,来到第二个商数。

然后我想知道是否有一种方法给出了所有的标准直接得到分子和分母的整数值。

如果您想知道需要两个整数值来设置​​的波特率发生器。

任何想法,将不胜感激。 问候

+1

为什么595/1000会变得很直观,当简单的四舍五入导致你更接近596/1000? – TJD

+1

你想要的是分母d = 1024的[最合理逼近](https://en.wikipedia.org/wiki/Continued_fraction#Best_rational_approximations)。这在Borgleader链接的重复中得到了解答。 –

+0

为了获得最佳精度,您可以使用可用的最高demoninator(对于从0到1023的值,这是512),这是2的幂。然后第一个分子是圆的(512 *值)。这保证了精度始终小于1/512,因为浮点值是二进制的。要更正分母以获得更好的精度,可以计算一个校正项=(分子/值) - 分母,并将其添加到分母中。 –

回答

0

如果使用16-bit整数,你可以只是numerator = 59578和分母牵住的10的功率因数,例如5。所以答案是59578/(10^5)

用这种方法你至少会保留4位置的精度。 只是一个想法...

+0

谢谢。 问题是分子和分母都只能有1023(10位)的最大值,这使问题比看起来更困难。它的一个例子是找到一个直接计算分子和分母的算法,或者一个可能做一些试验和错误的间歇方法。 此致敬礼 – user1704021