2014-01-20 21 views
1

在这里,我们正面临着两个数组排序的奇怪问题:它们中的数字是显示这些数组的顶部和底部,最大值和最小值的关键为了将它们排成一行。排序数组中负数的错误(双精度)

这里有两个阵列:

double[] hor = {5.938, 5.989, 6.047, 6.105, 6.159, 6.211, 6.260, 6.314, 6.351}; 
double[] vert = {-6.589,-6.348, -5.991, -5.691,- 5.491, -5.203, -4.989,- 4.805, -4.650}; 

A和功能:

public void escala(double[] hor, double[] vert) { 

    double minX = Double.MAX_VALUE; 
    double maxX = Double.MIN_VALUE; 
    for (double x : hor) { 
     if (x < minX) 
      minX = x; 
     if (x > maxX) 
      maxX = x; 

    } 
    double minY = Double.MAX_VALUE; 
    double maxY = Double.MIN_VALUE; 
    for (double y : vert) { 
     if (y < minY) 
      minY = y; 
     if (y > maxY) 
      maxY = y; 
    } 

    double margin=0.00; 
    final double actualMaxY = maxY+margin*(maxY-minY); 
    final double actualMinY = minY-margin*(maxY-minY); 
    final double actualMaxX = maxX+margin*(maxX-minX); 
    final double actualMinX = minX-margin*(maxX-minX); 

    System.err.println("actualMinY==" + actualMinY); 
    System.err.println("actualMaxY==" + actualMaxY); 

    cgraf.setLimits(actualMinX, actualMaxX, actualMinY, actualMaxY, (maxX-minX)/5, (maxY-minY)/10); 
    ccur.setLimits(actualMinX, actualMaxX, actualMinY, actualMaxY, (maxX-minX)/5, (maxY-minY)/10); 

} 

而结果的头痛是这样的:

  • 最大值= 0.000(当然,4.9E-324)
  • 最小值= -6.589

它适用于正数的数组。但是对于这个负数数组,它会崩溃。有关如何更改代码以使其能够工作的任何想法?

预期的结果是:

  • 最大值= -4.650
  • 最小值= -6.589

需要该函数值发送到图形类中的applet。

+0

预期结果是什么? – Christian

+0

看看数学课的辅助方法 – hd1

回答

4

的问题是,

double maxY = Double.MIN_VALUE; 

接近0,实际上它是4.9E-324这相当于4.9 * Math.pow(10, -324)。这就是排序不起作用的原因。你可以试试

double maxY = -Double.MAX_VALUE; 

改为。

Double.MIN_VALUE一个常量保持类型double的最小正非零值,2 ^( - 1074)。

注意:您可能也想要更改maxX

编辑:您可能还会感兴趣的:Double.NEGATIVE_INFINITY

+0

它看起来很完美! – ViceNocillator

+0

殴打几秒钟。另请参阅[Double.MIN_VALUE](http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#MIN_VALUE)和[“正确获取最负双倍的方式”]( http://stackoverflow.com/questions/2389613/correct-way-to-obtain-the-most-negative-double)。海事组织的JDK应该已经命名了其他东西。 – Radiodef

+0

请参见['Double.NEGATIVE_INFINITY'](http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#NEGATIVE_INFINITY) – Christian