我们可以使用字符串来获得高精度浮点数吗?

the*_*sys 1 c++ floating-point floating-accuracy

我目前正在编写一个需要高精度浮点数的软件.有时候我需要的精确度比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...
Run Code Online (Sandbox Code Playgroud)

sum_strings然后该函数将执行添加,就像我们在小学中学到的一样(只有浮点数):

在此输入图像描述

减产将以同样的方式运作.乘法和除法会更复杂,但它也会起作用.

我认为理论上你可以获得所需的精度(有足够的RAM来存储字符串).

我的问题是:

  1. 这种技术会慢得多(约10个小数位)吗?
  2. 是否已经使用并且是否有实施它的库?

spr*_*ceb 8

这会慢得多,因为您将使用完整的char来处理单个数据,并且您执行的操作将完全无法使用硬件实现的算术运算.更好的方法是设计一个任意长度的二进制格式.请参阅https://gmplib.org.还有很多其他选择.