2012-09-27 66 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