6

我正在设计一个数学软件,其算法适用于通用整数类型,例如机器整数或 GMP 整数。对于性能,通常希望使用机器整数,但如果出现溢出,则可能需要尝试切换到 GMP;理想情况下在运行时。到目前为止,整个程序都是作为整数类型的模板编写的。随着图书馆的发展,痛苦也在增加:

  • 编译时间和内存消耗正在失控。
  • 编译时的错误消息不太有用。
  • 调试更痛苦。
  • 整个代码在头文件中。

我可以想到以下解决方案。重构代码以依赖于通过编译时宏定义的固定类型。然后制作该库的多个副本,每个整数类型一个,并将它们链接到可执行文件中。缺点似乎是我需要库本身的接口。

简短的问题是:对于几乎整个程序都依赖于一种类型的情况,设计模式是什么?

4

2 回答 2

4

GNU多精度算术

精心设计为尽可能快,无论是对于小操作数还是对于大操作数。

换句话说,如果您使用 GMP 库,那么它将为您解决这些困难,并为您节省大量精力!

于 2013-01-31T17:10:11.777 回答
2

In my own mathematical software, I use GMP by default but I want to provide a fallback if it is not available. I also didn't enjoy the huge gmpxx header file which slows down the compilation on my slow machine.

So I essentially wrote a wrapper class over an undefined integer (with pimpl using std::aligned_storage). The back end can be chosen during compilation time.

This gets rid of the templates and gives enough flexibility for me.

于 2013-01-31T17:21:51.137 回答