提升人类可读分数单位的库

时间:2014-10-13 20:09:55

标签: c++ boost

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

  • from(double) 2.56
  • to(string)' 2 5/9 ' ?

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

1 个答案:

答案 0 :(得分:3)

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

我引用了boost::rational

的文档
  

库不提供从浮点到理性的转换函数。收到了一些关于这种转换的请求,但是对增强列表的广泛讨论得出的结论是,没有最好的解决方案"问题。由于没有理由为什么图书馆的用户不能编写适合他们特定要求的自己的转换功能,因此决定不选择任何一种算法作为"标准" ...

     

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

     

由于这些相互矛盾的要求,显然没有单一的解决方案可以满足所有用户。此外,所涉及的算法相对复杂且专业,并且最好在充分理解应用程序要求的情况下实现。所有这些因素使得这样的功能不适用于诸如此类的通用库。

GP / Pari确实实现了bestappr(X, B)函数,该函数(在其中一个版本中)返回其分母小于X的{​​{1}}的最佳有理逼近。 (感谢@ SLeske' answer对指针的类似问题。)

Google搜索"实数的有理逼近"产生了许多其他链接,包括Emilie Charriera和Lilian Buzera的这个non-paywalled paper(以及允许开放访问的 Discrete Applied Mathematics 的三个欢呼。)