有一个在Java中由Jama Matrix编写的类。这个类就像这样:
public Matrix (int m, int n, double s) {
this.m = m;
this.n = n;
A = new double[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
A[i][j] = s;
}
}
}
它可以创建一个 m*n 维度的矩阵,其数据类型为 double,这意味着它在小数点后面保留 6 位数字。但我需要一个可以在小数点后面保留至少 10 位数字的矩阵(例如 12.1234567890)。因此,在搜索后,我找到了 BigDecimal 数据类型,它可以接受此类值。因此,我稍微修改了以前的代码。
public Matrix(int m,int n,BigDecimal s){
this.m=m;
this.n=n;
A= new BigDecimal[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
A[i][j]=s;
}
}
}
但是它会抛出错误。在Java中是否有其他用于浮点数的数据类型?
当运行此代码时,我有点困惑。
public class T {
public static void main(String args[]){
double a= 3.256147001235;
double b=4.200001258920;
double c=a+b;
System.out.println(c);
}
}
在这里,数据类型也是double,但输出结果为7.456148260155
。所以,在矩阵类中它不能够处理这么大的数字。
A[i][j] = s.clone();
BigDecimal是一个类。 - Victor Gubindouble
应该不会有任何问题储存 15 个小数位。然而,第 16 位小数无法被完全储存,这可能意味着值无法准确地进行十进制回合旅程。(您需要10位离散数字吗?还是这是连续值的10位精度样本,其中1e-16的误差不是问题?) - Daniel PrydenBigDecimal
是一种不可变类型。对于数组中的每个条目,没有必要克隆对象;拥有对例如BigDecimal.ZERO
的一百万个引用是可以的,因为它永远不会“变成”另一个数字。 - Daniel PrydenBigDecimal[][] A
来修复。 - Sergey Kalinichenko