假设我有一段这样的代码:
typedef double My_fp_t;
My_fp_t my_fun( My_fp_t input )
{
// some fp computation, it uses operator+, operator- and so on for type My_fp_t
}
My_fp_t input = 0.;
My_fp_t output = my_fun( input );
是否可以使用浮点任意精度C ++库来改进现有代码?
我想简单地添加#include <cpp_arbitrary_precision_fp>
,将我的typedef double My_fp_t;
更改为typedef arbitrary_double_t My_fp_t;
并让运算符重载C ++完成其工作......
我的主要问题是实际上我的代码没有typedef
:-(因此我的计划可能注定要失败。
假设我的代码有typedef,我还会面临哪些其他问题?
答案 0 :(得分:2)
这可能很难。我在PhD thesis代码中使用了模板方法来处理不同的数字类型。您可能需要查看它以查看我遇到的问题。
如果您对数字的所有操作都使用标准算术运算符,那么您就可以了。但是,只要使用平方根或其他非运算符函数,就需要创建辅助对象来检测对象的类型(在编译时,因为在运行时这样做太慢;请参阅boost元编程库以获取帮助然后调用正确的函数并将其作为正确的类型返回。这一切都是完全可行的,但可能需要比你想象的更长的时间,并且会大大增加代码的复杂性。
根据我的经验,(我使用GMP,它必须是C ++可用的最快的任意精度库)在我引入的所有努力和复杂性之后,我发现GMP对于我的各种计算来说太慢了正在做;所以它在学术上很有趣,但几乎没用。在开始之前,做一些速度测试,看看如果使用任意精度算术,你的库是否仍然可用。
答案 1 :(得分:1)
如果库定义了一个正确重载你使用的运算符的类型,我没有看到任何问题...