如何将过于精确的分数舍入为更易于阅读的不太精确的格式?
我正在处理由 MS 的 Windows 成像组件提取的 JPEG EXIF 曝光时间数据。 WIC 以分数形式返回曝光时间,其中分子和分母分别为整数。
WIC 通常按预期工作,但对于某些 JPEG,WIC 返回百万分之一秒的曝光时间,这意味着不是报告例如1/135 秒的曝光时间,它报告的曝光时间为 7391/1000000 秒。 1/135 和 7391/1000000 之间的差异非常小,但后者对于大多数用户来说并不直观。因此,我想将过于精确的曝光时间四舍五入为摄影中使用的最接近的标准曝光时间。
除了使用已知合理曝光时间的查找表并查找最接近的匹配之外,还有更好的方法吗?
最佳答案
您可以计算大分数的连分数展开式。然后将第一个收敛的一个作为您的近似分数。
就您而言,您会得到
7391/1000000 = [ 0; 135, 3, 2, ...]
所以第一个收敛是1/135=0.0074074...,下一个
1/(135+1/3) = 3/406 = 0.00738916256...
第三个
1/(135+1/(3+1/2)) = 1/(135+2/7) = 7/947 = 0.00739176346...
要计算连续分数展开的(第一个)系数,请从 xk=x0 开始。然后迭代应用该过程
- 将 xk=n+r 分成整数 n 和小数部分 r。
- 整数是下一个系数 ak,小数部分的倒数重新开始此过程,xk = 1/r
应用于给定的数字,这将准确地产生上述序列的开头然后重建有理表达式,继续直到分母的平方的倒数小于给定的容差。
关于math - 将过于精确的分数舍入到人类友好的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799534/