用于人类可读分数单位的Boost库

Boost library for human-readable fractional units

本文关键字:单位 Boost 人类 用于      更新时间:2023-10-16

是否有boost库支持我们将doubles转换为(美国式)分数单位,即转换

  • 从(双)2.56
  • 到(字符串)'2 5/9'

用例是向用户显示小数,同时在内部保留双重表示。分数表示很可能是精确内部值的近似值。

Boost似乎已经考虑到了这个问题,并决定不实施它。

我引用了boost::rational的文档

该库不提供从浮点到有理的转换函数。收到了许多关于这种转换的请求,但对助推名单的广泛讨论得出的结论是;最佳解决方案";解决问题。由于库的用户没有理由不能编写适合其特定要求的自己的转换函数,因此决定不选择任何一种算法作为"转换函数";标准";…

所有这些都意味着我们应该寻找某种形式的";最接近的简单分数";。确实存在确定这类值的算法。然而,并不是所有的应用程序都希望这样工作…

对于这些相互冲突的需求,显然没有一个单一的解决方案能够满足所有用户。此外,所涉及的算法相对复杂且专业,最好在充分了解应用程序需求的情况下实现。所有这些因素都使得这样的函数不适合这样的通用库。

GP/Pari确实实现了bestappr(X, B)函数,该函数(在其一个化身中)返回分母小于BX的最佳有理逼近。(感谢@SLeske对指针类似问题的回答。)

谷歌搜索";实数的有理逼近";产生了许多其他链接,包括Emilie Charriera和Lilian Buzera的这篇非付费论文(并为离散应用数学允许开放访问而欢呼三声)