有哪些Java库可以提供具有数千位精度的浮点或定点运算快速实现?它们的性能如何?
我需要的一个要求是,它实现了比朴素的乘法算法更好的乘法算法,对于比原来大2倍的数字,需要的时间只有朴素算法的四分之一(请参阅乘法算法)。
有哪些Java库可以提供具有数千位精度的浮点或定点运算快速实现?它们的性能如何?
我需要的一个要求是,它实现了比朴素的乘法算法更好的乘法算法,对于比原来大2倍的数字,需要的时间只有朴素算法的四分之一(请参阅乘法算法)。
你是否检查过BigDecimal的性能?在JavaDoc中我没有看到明显的东西,但这肯定是我的首选。
Apfloat提供了尾数的高精度,但指数的精度似乎比通常的要低(基于这样一个事实:对于double可以处理的值,它会崩溃并显示“零的对数”)。因此,它对大数没有用处。
此外,文档中还说:
“使用构造函数Apfloat(float,long)和Apfloat(double,long)存在一个陷阱。由于浮点数和双精度数在内部总是以基数2表示,将其转换为任何其他基数通常会导致舍入误差,并且得到的apfloat不会准确地达到所需的位数。
例如,0.3无法在基数2中准确表示。当您像new Apfloat(0.3f, 1000)这样构造一个apfloat时,得到的数字不会准确地达到1000位,而只能大约达到7位(在基数10中)。实际上,得到的数字将是类似于0.30000001192092896...的东西。”
这使得Apfloat似乎最小限度有用。
BigDecimal没有对数函数,并且文档也没有说明它是否允许您制作比double更大的数字;指数是32位的,有点像。