提问者:小点点

我们可以将字符串用于高精度浮点数吗?


我目前正在编写一个需要高精度浮点数的软件。有时我需要的精度比double能给我的精度还要高。我知道为什么经典的浮点数只能达到有限的精度。

我在思考这个问题,有了用string表示数字并用它们进行计算的想法。

string number_one = "12.3459233547343432";
string number_two = "738.67632487523747384";

string sum = sum_strings(number_one, number_two);

cout << sum << endl; // 751.0222482299717...

函数sum_strings将执行加法,就像我们在小学学到的那样(只是使用浮点数):

减法也是一样的。乘法和除法会更复杂,但它也会起作用。

我认为理论上你可以达到你需要的精度(有足够的RAM来存储字符串)。

我的问题是:

  1. 这种技术会慢得多吗(对于〜10个小数位)?
  2. 它是否已经被使用,是否有库实现它?

共2个答案

匿名用户

这会慢一点,因为您将对一位数字的数据使用完整的字符,并且您执行的操作将完全无法使用硬件实现的算术运算。更好的方法是设计任意长度的二进制格式。请参阅https://gmplib.org。还有许多其他选项。

匿名用户

你在正确的轨道上,但是std::string不是正确的数据结构。相反,使用std::向量

一旦你有了这个想法,你也可以考虑使用std::向量