/*
 * "Grundkurs Programmieren in Java (7. Auflage, 2014)"
 * 2003-2014, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe 12.7 (Version 2.0)
 * (c) 2003-2014 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 */

import java.math.BigDecimal;
 
public class Formel {
  
  /** Berechnung mit double-Werten */
  public static double berechne(double x,double y) {
    double xh2 = x*x;
    double yh2 = y*y;
    return (1682*x*yh2*yh2 + 3*xh2*x + 29*x*yh2 - 2*xh2*xh2*x + 832) / 107751;
  }
  
  /** Berechnung mit BigDecimal-Werten */
  public static BigDecimal berechne(BigDecimal x,BigDecimal y) {
    BigDecimal xh2 = x.multiply(x);
    BigDecimal yh2 = y.multiply(y);
    return 
      (BigDecimal.valueOf(1682).multiply(x).multiply(yh2).multiply(yh2)).add
      (BigDecimal.valueOf(3).multiply(xh2).multiply(x)).add
      (BigDecimal.valueOf(29).multiply(x).multiply(yh2)).subtract
      (BigDecimal.valueOf(2).multiply(xh2).multiply(xh2).multiply(x)).add
      (BigDecimal.valueOf(832)).divide(BigDecimal.valueOf(107751),BigDecimal.ROUND_HALF_UP);
  }
  
  public static void main (String[] args) {
    double z = berechne(192119201,35675640);
    System.out.println("Variante 1: z = " + z);
    BigDecimal z2 = berechne(BigDecimal.valueOf(192119201),
      BigDecimal.valueOf(35675640));
    System.out.println("Variante 2: z = " + z2);
  }

}
