如何将两个非常大的数字的除法解析为双精度数?

How to parse the division of two very large numbers into a double?

我有一个以多边形作为输入的几何算法。但是,我应该用作输入文件的文件以一种相当特殊的方式存储多边形的坐标。每个文件由一行组成,即顶点的逆时针序列。每个顶点由其 x 和 y 坐标表示,每个坐标都写为两个整数 int/int 的商。然而,这些整数非常大。我编写了一个程序,使用函数 std::stoll 将它们从字符串解析为 long long。但是,似乎输入文件中的某些数字大于 2^64

输出坐标通常很小,在0-1000范围内。我如何去解析这些数字然后将它们相除,获得双打?是否有任何标准库方法可以做到这一点,或者我应该使用像 boost 库这样的东西?

我相信您可以将输入直接解析为 long double。但是,这种方法会引入精度误差。如果精度很重要,请避免这种情况。

精确结果的一般解决方案是用整数数组表示大整数,其中一个整数表示低位字节,下一个整数表示较大字节等。这通常称为任意精度算术。

Is there any standard library way of doing this

否,除了用于存储数组的基本构建块(例如向量)。

or should I use something like the boost library?

这通常是一个很好的起点。 Boost恰好有一个库。

如果你是将两个大数的比值作为字符串,你可以缩短字符串:

"194725681173571753193674" 除以 "635482929374729202" 等于

"1947256811735717" 除以 "6354829293" 到至少 9 位数字(我只是在两边删除了相同数量的数字)。根据所需的精度,这可能是最简单的解决方案。只需在转换为 long long 之前删除数字。