我正在寻找java框架,它实现了Number类(忽略Atomic子类)的常见数学运算,使用类似的方法
compare(Number a, Number b);
add(Number a, Number b);
并遵循数字类型转换规则:
如果任何参数是十进制,则操作结果将为十进制,
如果所有参数都是整数,则操作结果将为整数。
目的: 我是数学实用程序类,它操作小数和整数。某些操作需要多次迭代,如果number为十进制,则会导致精度降低,但如果操作作用于整数参数(因为没有除法运算),则可以避免精度损失。因此,我试图通过使用数学框架尽可能地降低精度损失(对于所有参数都是整数的情况),这将在可能的情况下在整数域中计算。
另一个问题是 - 也许我错了,对于小数的mul / add / sub操作可能没有精度损失?
答案 0 :(得分:2)
你可以使用java.math.BigDecimal类来获得无限精度 Javadocs所谓的“任意精度”十进制算术。
答案 1 :(得分:0)
我曾经在我的大学做过一个项目,对所有类型的数字(包括整数,双等等)或其他数据结构(如间隔或复数等等)实施算术运算。
实现此目的的唯一方法是为所有不同类型实现包装类:
public interface NumberWrapper<T> {
public T add(T other);
public T substract(T other);
public T sin();
}
我们没有找到以任何方式支持我们的框架。
答案 2 :(得分:0)
除非您有无限数量的数字,否则可以使用十进制加法,减法和乘法进行精度损失。对于整数,在整数超过整数的最大大小的情况下,这甚至是正确的。
有限的数字意味着无限量的记忆......