我目前正在编写一个需要高精度浮点数的软件。有时我需要的精度比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来存储字符串)。
我的问题是:
这会慢一点,因为您将对一位数字的数据使用完整的字符,并且您执行的操作将完全无法使用硬件实现的算术运算。更好的方法是设计任意长度的二进制格式。请参阅https://gmplib.org。还有许多其他选项。
你在正确的轨道上,但是std::string
不是正确的数据结构。相反,使用std::向量
一旦你有了这个想法,你也可以考虑使用std::向量