DoubleComplexIntervalNumber.java
/*
* Created on 2004/08/05
*
* $Id: ComplexInterval.java,v 1.39 2008/04/23 09:43:20 yano Exp $
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*/
package org.mklab.cga.interval.scalar;
import org.mklab.cga.interval.matrix.DoubleComplexIntervalMatrix;
import org.mklab.cga.interval.matrix.DoubleIntervalMatrix;
import org.mklab.nfc.matrix.DoubleComplexMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.scalar.DoubleComplexNumber;
import org.mklab.nfc.scalar.DoubleNumber;
/**
* 倍精度の複素数の区間を表すクラスです。
*
* @author hiroki
* @version $Revision: 1.39 $. 2004/08/05
*/
public class DoubleComplexIntervalNumber extends AbstractIntervalComplexNumericalScalar<DoubleIntervalNumber,DoubleIntervalMatrix,DoubleComplexIntervalNumber,DoubleComplexIntervalMatrix,DoubleNumber,DoubleMatrix,DoubleComplexNumber,DoubleComplexMatrix>{
/** シリアル番号 */
private static final long serialVersionUID = -6325124450882844434L;
// /** 区間の下限 */
// private DoubleComplexNumber infimum;
//
// /** 区間の上限 */
// private DoubleComplexNumber supremum;
//
// /** 区間の中心 */
// private DoubleComplexNumber middle;
//
// /** 区間の半径 */
// private DoubleComplexNumber radius;
/**
* Creates {@link DoubleComplexIntervalNumber}.
* @param middle middle
* @param radius radius
*/
public DoubleComplexIntervalNumber(DoubleComplexNumber middle, DoubleNumber radius) {
super(middle, radius);
}
/**
* Creates {@link DoubleComplexIntervalNumber}.
* @param infimum infimum
* @param supremum supremum
*/
public DoubleComplexIntervalNumber(DoubleComplexNumber infimum, DoubleComplexNumber supremum) {
super(middle(infimum, supremum), radius(infimum, supremum));
}
/**
* 区間を作成します。複素数の中心を設定します。
*
* @param middle 中心
*/
public DoubleComplexIntervalNumber(final DoubleComplexNumber middle) {
super(middle);
}
/**
* 区間を作成します。複素数の中心と半径を設定します。
*
* @param middle 中心
* @param radius 半径
*/
public DoubleComplexIntervalNumber(final DoubleComplexNumber middle, final double radius) {
super(middle, new DoubleNumber(radius));
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalNumber createMidRad(DoubleComplexNumber middle, DoubleNumber radius) {
return new DoubleComplexIntervalNumber(middle,radius);
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalNumber create(DoubleComplexNumber value) {
return new DoubleComplexIntervalNumber(value);
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalNumber createInfSup(DoubleComplexNumber infimum, DoubleComplexNumber supremum) {
return new DoubleComplexIntervalNumber(middle(infimum, supremum), radius(infimum, supremum));
}
/**
* Creates interval
*
* @param infimum infimum
* @param supremum supremum
* @return interval
*/
public static DoubleComplexIntervalNumber createInfimumSuppremum(DoubleComplexNumber infimum, DoubleComplexNumber supremum) {
return new DoubleComplexIntervalNumber(middle(infimum, supremum), radius(infimum, supremum));
}
/**
* Creates interval
*
* @param middle middle
* @param radius radius
* @return interval
*/
public static DoubleComplexIntervalNumber createMiddleRadius(DoubleComplexNumber middle, DoubleNumber radius) {
return new DoubleComplexIntervalNumber(middle,radius);
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalNumber create(double value) {
return new DoubleComplexIntervalNumber(new DoubleComplexNumber(value));
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalNumber[] createArray(int size) {
return new DoubleComplexIntervalNumber[size];
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalNumber[][] createArray(int rowSize, int columnSize) {
return new DoubleComplexIntervalNumber[rowSize][columnSize];
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalNumber createImaginaryUnit() {
return new DoubleComplexIntervalNumber(new DoubleComplexNumber(0,1));
}
/**
* {@inheritDoc}
*/
public DoubleIntervalNumber createInfSup(DoubleNumber infimum, DoubleNumber supremum) {
return DoubleIntervalNumber.createInfimumSupremum(infimum, supremum);
}
/**
* {@inheritDoc}
*/
public DoubleIntervalNumber createMidRad(DoubleNumber middle, DoubleNumber radius) {
return DoubleIntervalNumber.createMiddleRadius(middle, radius);
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalMatrix createGrid(int rowSize, int columnSize, DoubleComplexIntervalNumber[][] elements) {
return new DoubleComplexIntervalMatrix(elements);
}
/**
* {@inheritDoc}
*/
public DoubleComplexIntervalMatrix createGrid(DoubleComplexIntervalNumber[] elements) {
return new DoubleComplexIntervalMatrix(elements);
}
// /**
// * {@inheritDoc}
// */
// public DoubleComplexNumber getInfimum() {
// return this.infimum;
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexNumber getSupremum() {
// return this.supremum;
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexNumber getMiddle() {
// return this.middle;
// }
// /**
// * {@inheritDoc}
// */
// public DoubleNumber getRadius() {
// return this.radius;
// }
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber create(final int value) {
// return new DoubleComplexIntervalNumber(new DoubleComplexNumber(value, 0));
// }
//
// /**
// * @see org.mklab.cga.interval.scalar.IntervalScalar#add(org.mklab.cga.interval.scalar.IntervalScalar)
// */
// public DoubleComplexIntervalNumber add(final IntervalScalar<?> interval) {// IC+IR, IC+IC
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber c1 = (DoubleComplexNumber)this.middle.add(interval.getMiddle());
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = (DoubleComplexNumber)this.middle.add(interval.getMiddle());
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius + ((DoubleNumber)interval.getRadius()).doubleValue();
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber add(final double d) {// IC+R
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber c1 = this.middle.add(d);
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = this.middle.add(d);
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius;
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber add(final DoubleComplexNumber c) {// IC+C
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber c1 = this.middle.add(c);
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = this.middle.add(c);
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius;
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber subtract(final DoubleComplexIntervalNumber interval) {// IC-IR, IC-IC
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber c1 = (DoubleComplexNumber)this.middle.subtract(interval.getMiddle());
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = (DoubleComplexNumber)this.middle.subtract(interval.getMiddle());
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius + ((DoubleNumber)interval.getRadius()).doubleValue();
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber subtract(final double d) {// IC-R
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber c1 = this.middle.subtract(d);
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = this.middle.subtract(d);
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius;
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber subtract(final DoubleComplexNumber c) {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber c1 = this.middle.subtract(c);
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = this.middle.subtract(c);
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius;
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber multiply(final DoubleComplexIntervalNumber interval) {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// double a_mid_real = this.middle.getRealPart().doubleValue();
// double a_mid_imag = this.middle.getImaginaryPart().doubleValue();
//
// double b_mid_real = ((DoubleNumber)interval.getMiddle().getRealPart()).doubleValue();
// double b_mid_imag = ((DoubleNumber)interval.getMiddle().getImaginaryPart()).doubleValue();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
//
// double c1_real = a_mid_real * b_mid_real + (-a_mid_imag) * b_mid_imag;
// double c1_imag = a_mid_real * b_mid_imag + a_mid_imag * b_mid_real;
// DoubleComplexNumber c1 = new DoubleComplexNumber(c1_real, c1_imag);
//
// manager.setRoundMode(RoundMode.ROUND_UP);
//
// double c2_real = a_mid_real * b_mid_real + (-a_mid_imag) * b_mid_imag;
// double c2_imag = a_mid_real * b_mid_imag + a_mid_imag * b_mid_real;
// DoubleComplexNumber c2 = new DoubleComplexNumber(c2_real, c2_imag);
//
// DoubleComplexNumber mid = c1.add(c2.subtract(c1).divide(2));
// double rad;
//
// if (this.radius == 0) {
// if (interval.getRadius().isZero()) {
// rad = mid.subtract(c1).abs().doubleValue();
// } else {
// rad = mid.subtract(c1).abs().doubleValue() + this.middle.abs().doubleValue() + ((DoubleNumber)interval.getRadius()).doubleValue();
// }
// } else if (interval.getRadius().isZero()) {
// rad = mid.subtract(c1).abs().doubleValue() + this.radius * ((DoubleNumber)interval.getMiddle().abs()).doubleValue();
// } else {
// rad = mid.subtract(c1).abs().doubleValue() + this.radius * (((DoubleNumber)interval.getMiddle().abs()).doubleValue() + ((DoubleNumber)interval.getRadius()).doubleValue())
// + this.middle.abs().doubleValue() * ((DoubleNumber)interval.getRadius()).doubleValue();
// }
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber multiply(final double d) {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber c1 = this.middle.multiply(d);
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber c2 = this.middle.multiply(d);
//
// DoubleComplexNumber mid = c1.add(c2.subtract(c1).divide(2));
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius * Math.abs(d);
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber multiply(final DoubleComplexNumber c) {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// double a_mid_real = this.middle.getRealPart().doubleValue();
// double a_mid_imag = this.middle.getImaginaryPart().doubleValue();
//
// double b_mid_real = c.getRealPart().doubleValue();
// double b_mid_imag = c.getImaginaryPart().doubleValue();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
//
// double c1_real = a_mid_real * b_mid_real + (-a_mid_imag) * b_mid_imag;
// double c1_imag = a_mid_real * b_mid_imag + a_mid_imag * b_mid_real;
//
// DoubleComplexNumber c1 = new DoubleComplexNumber(c1_real, c1_imag);
//
// manager.setRoundMode(RoundMode.ROUND_UP);
//
// double c2_real = a_mid_real * b_mid_real + (-a_mid_imag) * b_mid_imag;
// double c2_imag = a_mid_real * b_mid_imag + a_mid_imag * b_mid_real;
//
// DoubleComplexNumber c2 = new DoubleComplexNumber(c2_real, c2_imag);
//
// DoubleComplexNumber mid = c1.add(c2.subtract(c1).divide(2));
//
// double rad = mid.subtract(c1).abs().doubleValue() + this.radius * c.abs().doubleValue();
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber sqrt() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber l = this.infimum.sqrt();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber s = this.supremum.sqrt();
//
// DoubleComplexNumber mid = l.add((s.subtract(l)).divide(2));
// double rad = mid.subtract(l).abs().doubleValue();
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(mid, rad);
// }
//
// /**
// * {@inheritDoc}
// */
// public double mig() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
//
// double c = this.middle.abs().doubleValue() - this.radius;
//
// if (c >= 0) {
// c = c * 1;
// } else {
// c = c * 0;
// }
//
// manager.setRoundMode(oldRoundMode);
// return c;
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber unaryMinus() {
// return new DoubleComplexIntervalNumber(this.middle.unaryMinus(), this.radius);
// }
//
// /**
// * 逆数を求めます。
// *
// * @return 複素区間の逆数。
// */
// /*
// * public ComplexInterval inverse() { ComplexInterval numerator =
// * this.conjugate(); ComplexInterval denominator = this.multiply(numerator);
// *
// * double numerator_upper_real = numerator.getUpper().getRealPart(); double
// * numerator_lower_real = numerator.getLower().getRealPart(); double
// * numerator_upper_imag = numerator.getUpper().getImagPart(); double
// * numerator_lower_imag = numerator.getLower().getImagPart();
// *
// * double denominator_upper = denominator.getUpper().getRealPart(); double
// * denominator_lower = denominator.getLower().getRealPart();
// *
// * RealInterval numerator_realPart = new RealInterval( numerator_lower_real,
// * numerator_upper_real); RealInterval numerator_imagPart = new RealInterval(
// * numerator_lower_imag, numerator_upper_imag);
// *
// * RealInterval denominator_realPart = new RealInterval(denominator_lower,
// * denominator_upper); //System.out.println("分子実部");
// * //numerator_realPart.print(); //System.out.println("分母虚部");
// * //numerator_realPart.print(); //System.out.println("分母実部");
// * //denominator_realPart.print();
// *
// * RealInterval realPart = numerator_realPart.divide(denominator_realPart);
// * RealInterval imagPart = numerator_imagPart.divide(denominator_realPart);
// * //System.out.println("実部"); //realPart.print(); //System.out.println("虚部");
// * //imagPart.print();
// *
// * Complex lower = new Complex(realPart.getLower(), imagPart.getLower());
// * Complex upper = new Complex(realPart.getUpper(), imagPart.getUpper());
// *
// * return new ComplexInterval(lower, upper); }
// */
//
// /**
// * 複素共役数を求めます。
// *
// * @return 複素共役数
// */
// /*
// * public ComplexInterval conjugate() { Complex inf_conjugate =
// * this.inf.conjugate(); Complex sup_conjugate = this.sup.conjugate();
// *
// * double lower_conjugate_real = inf_conjugate.getRealPart(); double
// * lower_conjugate_imag = inf_conjugate.getImagPart(); double
// * upper_conjugate_real = sup_conjugate.getRealPart(); double
// * upper_conjugate_imag = sup_conjugate.getImagPart();
// *
// * Complex inf = new Complex(lower_conjugate_real, upper_conjugate_imag);
// * Complex sup = new Complex(upper_conjugate_real, lower_conjugate_imag);
// *
// * return new ComplexInterval(inf, sup); }
// */
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexNumber getError() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber error = this.supremum.subtract(this.infimum);
//
// manager.setRoundMode(oldRoundMode);
// return error;
// }
//
// /**
// * {@inheritDoc}
// */
// public void printInterval() {
// printInterval("ans"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public void printInterval(final String name) {
// System.out.println(name + "(infimum,supremum) = [" + this.infimum + ", " + this.supremum + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// }
//
// /**
// * {@inheritDoc}
// */
// public void printMidRad() {
// printMidRad("ans"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public void printMidRad(final String name) {
// System.out.println(name + "(middle,radius) = <" + this.middle + ", " + this.radius + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// }
//
// /**
// * {@inheritDoc}
// */
// public void printInfSup() {
// printInfSup("ans"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public void printInfSup(final String name) {
// this.infimum.print(name + Messages.getString("ComplexInterval.0")); //$NON-NLS-1$
// this.supremum.print(name + Messages.getString("ComplexInterval.1")); //$NON-NLS-1$
// }
//
// /**
// * 下限を求めます。
// *
// * @return 下限
// */
// private DoubleComplexNumber inf() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// double real = this.middle.getRealPart().doubleValue() - this.radius;
// double imag = this.middle.getImaginaryPart().doubleValue() - this.radius;
// DoubleComplexNumber inf = new DoubleComplexNumber(real, imag);
//
// manager.setRoundMode(oldRoundMode);
// return inf;
// }
//
// /**
// * 上限を求めます。
// *
// * @return 上限
// */
// private DoubleComplexNumber sup() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// double real = this.middle.getRealPart().doubleValue() + this.radius;
// double imag = this.middle.getImaginaryPart().doubleValue() + this.radius;
// DoubleComplexNumber sup = new DoubleComplexNumber(real, imag);
//
// manager.setRoundMode(oldRoundMode);
// return sup;
// }
//
// /**
// * 区間の中心を求めます。
// *
// * @return 区間の中心。
// */
// private DoubleComplexNumber mid() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = this.infimum.add(this.supremum.subtract(this.infimum).divide(2));
//
// manager.setRoundMode(oldRoundMode);
// return mid;
// }
//
// /**
// * 区間の半径を求めます。
// *
// * @return 区間の半径。
// */
// private double rad() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber mid = mid();
// double rad = mid.subtract(this.infimum).abs().doubleValue();
//
// manager.setRoundMode(oldRoundMode);
// return rad;
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber divide(DoubleComplexIntervalNumber i) {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public void printInfSupByBit(String name) {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber add(int value) {
// return new DoubleComplexIntervalNumber(this.infimum.add(value), this.supremum.add(value));
// }
//
// // /**
// // * @see org.mklab.nfc.scalar.Scalar#addSelf(org.mklab.nfc.scalar.Scalar)
// // */
// // public Scalar<?> addSelf(Scalar<?> value) {
// // RoundModeManager manager = RoundModeManager.getManager();
// // RoundMode oldRoundMode = manager.getRoundMode();
// //
// // manager.setRoundMode(RoundMode.ROUND_DOWN);
// // DoubleComplexNumber c1 = this.middle.add(((DoubleComplexIntervalNumber)value).getMiddle());
// //
// // manager.setRoundMode(RoundMode.ROUND_UP);
// // DoubleComplexNumber mid = this.middle.add(((DoubleComplexIntervalNumber)value).getMiddle());
// //
// // double rad = mid.subtract(c1).abs().doubleValue();
// // rad = rad + this.radius;
// // rad = rad + ((DoubleComplexIntervalNumber)value).getRadius().doubleValue();
// //
// // manager.setRoundMode(oldRoundMode);
// // return new DoubleComplexIntervalNumber(mid, rad);
// // }
//
// /**
// * {@inheritDoc}
// */
// public boolean compare(String operator, int opponent) {
// if (operator.equals(".!=")) { //$NON-NLS-1$
// if (this.infimum.getRealPart().equals(new DoubleNumber(opponent)) && this.infimum.getImaginaryPart().isZero() && this.supremum.getRealPart().equals(new DoubleNumber(opponent))
// && this.supremum.getImaginaryPart().isZero()) {
// return false;
// }
// } else if (operator.equals(".==")) { //$NON-NLS-1$
// if (this.infimum.getRealPart().equals(new DoubleNumber(opponent)) == false || this.infimum.getImaginaryPart().isZero() == false
// && this.supremum.getRealPart().equals(new DoubleNumber(opponent)) == false || this.supremum.getImaginaryPart().isZero() == false) {
// return false;
// }
// } else if (operator.equals(".<")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isLessThan(opponent);
// throw new UnsupportedOperationException();
// } else if (operator.equals(".<=")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isLessThanOrEquals(opponent);
// throw new UnsupportedOperationException();
// } else if (operator.equals(".>")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isGreaterThan(opponent);
// throw new UnsupportedOperationException();
// } else if (operator.equals(".>=")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isGreaterThanOrEquals(opponent);
// throw new UnsupportedOperationException();
// } else {
// throw new UnsupportedOperationException();
// }
//
// return true;
//
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean compare(String operator, double opponent) {
// if (operator.equals(".!=")) { //$NON-NLS-1$
// if (this.infimum.getRealPart().equals(new DoubleNumber(opponent)) && this.infimum.getImaginaryPart().isZero() && this.supremum.getRealPart().equals(new DoubleNumber(opponent))
// && this.supremum.getImaginaryPart().isZero()) {
// return false;
// }
// } else if (operator.equals(".==")) { //$NON-NLS-1$
// if (this.infimum.getRealPart().equals(new DoubleNumber(opponent)) == false || this.infimum.getImaginaryPart().isZero() == false
// && this.supremum.getRealPart().equals(new DoubleNumber(opponent)) == false || this.supremum.getImaginaryPart().isZero() == false) {
// return false;
// }
// } else if (operator.equals(".<")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isLessThan(opponent);
// throw new UnsupportedOperationException();
// } else if (operator.equals(".<=")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isLessThanOrEquals(opponent);
// throw new UnsupportedOperationException();
// } else if (operator.equals(".>")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isGreaterThan(opponent);
// throw new UnsupportedOperationException();
// } else if (operator.equals(".>=")) { //$NON-NLS-1$
// // TODO 実装して実行できるようにする
// // return isGreaterThanOrEquals(opponent);
// throw new UnsupportedOperationException();
// } else {
// throw new UnsupportedOperationException();
// }
//
// return true;
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber conjugate() {
// return new DoubleComplexIntervalNumber(this.middle.conjugate(), this.radius);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalMatrix createGrid(int rowSize, int columnSize, DoubleComplexIntervalNumber[][] elements) {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalMatrix createGrid(DoubleComplexIntervalNumber[] elements) {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber createUnit() {
// return new DoubleComplexIntervalNumber(this.middle.createUnit(), 0);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber divide(int value) {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber divide(double value) {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean equals(DoubleComplexIntervalNumber opponent, double tolerance) {
// final boolean realEquals = this.infimum.getRealPart().equals(opponent.getInfimum().getRealPart(), tolerance) && this.supremum.getRealPart().equals(opponent.getSupremum().getRealPart(), tolerance);
// final boolean imagEquals = this.infimum.getImaginaryPart().equals(opponent.getInfimum().getImaginaryPart(), tolerance)
// && this.infimum.getImaginaryPart().equals(opponent.getSupremum().getImaginaryPart(), tolerance);
// return realEquals && imagEquals;
// }
//
// // /**
// // * @see org.mklab.nfc.scalar.Scalar#equals(org.mklab.nfc.scalar.Scalar, double)
// // */
// // @Override
// // public boolean equals(Scalar<?> opponent, double tolerance) {
// // if (opponent instanceof DoubleComplexIntervalNumber) {
// // return equals((DoubleComplexIntervalNumber)opponent, tolerance);
// // }
// // return super.equals(opponent, tolerance);
// // }
//
// /**
// * {@inheritDoc}
// */
// public DoubleIntervalNumber getImaginaryPart() {
// return new DoubleIntervalNumber(this.infimum.getImaginaryPart().doubleValue(), this.supremum.getImaginaryPart().doubleValue());
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleIntervalNumber getRealPart() {
// return new DoubleIntervalNumber(this.infimum.getRealPart().doubleValue(), this.supremum.getRealPart().doubleValue());
// }
//
// /**
// * {@inheritDoc}
// */
// public void setRealPart(int realPart) {
// this.middle.setRealPart(realPart);
// this.infimum = inf();
// this.supremum = sup();
// }
//
// /**
// * {@inheritDoc}
// */
// public void setRealPart(double realPart) {
// this.middle.setRealPart(realPart);
// this.infimum = inf();
// this.supremum = sup();
// }
//
// /**
// * {@inheritDoc}
// */
// public void setRealPart(DoubleIntervalNumber realPart) {
// if (realPart instanceof DoubleNumber) {
// this.middle.setRealPart(realPart);
// this.infimum = inf();
// this.supremum = sup();
// }
// throw new UnsupportedOperationException("Not appropriate date type"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public void setImaginaryPart(int imagPart) {
// this.middle.setImaginaryPart(imagPart);
// this.infimum = inf();
// this.supremum = sup();
// }
//
// /**
// * {@inheritDoc}
// */
// public void setImaginaryPart(double imagPart) {
// this.middle.setImaginaryPart(imagPart);
// this.infimum = inf();
// this.supremum = sup();
// }
//
// /**
// * {@inheritDoc}
// */
// public void setImaginaryPart(DoubleIntervalNumber imagPart) {
// if (imagPart instanceof DoubleNumber) {
// this.middle.setImaginaryPart(imagPart);
// this.infimum = inf();
// this.supremum = sup();
// }
// throw new UnsupportedOperationException("Not appropriate date type"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber inverse() {
// DoubleComplexIntervalNumber conj = this.conjugate();
// DoubleIntervalNumber den = this.multiply(conj).getRealPart();
// final DoubleIntervalNumber realPart = conj.getRealPart().divide(den);
// final DoubleIntervalNumber imagPart = conj.getImaginaryPart().divide(den);
// DoubleComplexNumber inf = new DoubleComplexNumber(realPart.getInfimum().doubleValue(), imagPart.getInfimum().doubleValue());
// DoubleComplexNumber sup = new DoubleComplexNumber(realPart.getSupremum().doubleValue(), imagPart.getSupremum().doubleValue());
// return new DoubleComplexIntervalNumber(inf, sup);
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isComplex() {
// return true;
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isInfinite() {
// return this.infimum.isInfinite() && this.supremum.isInfinite();
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isNaN() {
// return this.infimum.isNaN() && this.supremum.isNaN();
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isReal() {
// return false;
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isUnit() {
// return this.infimum.isUnit() && this.supremum.isUnit();
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isUnit(double tolerance) {
// return this.infimum.isUnit(tolerance) && this.supremum.isUnit(tolerance);
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isUnit(DoubleComplexIntervalNumber tolerance) {
// return this.infimum.isUnit(tolerance) && this.supremum.isUnit(tolerance);
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isZero(double tolerance) {
// return this.infimum.isZero() && this.supremum.isZero();
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isZero(DoubleComplexIntervalNumber tolerance) {
// return this.infimum.isZero() && this.supremum.isZero();
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber leftDivide(int value) {
// return this.inverse().multiply(value);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber leftDivide(double value) {
// return this.inverse().multiply(value);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber multiply(int value) {
// return new DoubleComplexIntervalNumber(this.middle.multiply(value), this.radius);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber power(int scalar) {
// // TODO 絶対値と角度の形式に書き直す
// DoubleComplexIntervalNumber value = (DoubleComplexIntervalNumber)this.clone();
// for (int i = 0; i < scalar; i++) {
// value = value.multiply(value);
// }
// return value;
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber subtract(int value) {
// return new DoubleComplexIntervalNumber(this.infimum.subtract(value), this.supremum.subtract(value));
// }
//
//// /**
//// * @see org.mklab.nfc.scalar.Scalar#toComplex()
//// */
//// public DoubleComplexIntervalNumber toComplex() {
//// return (DoubleComplexIntervalNumber)this.clone();
//// }
//
// /**
// * {@inheritDoc}
// */
// public String toString(String valueFormat) {
// // TODO 下限と上限もメソッド呼び出した方がいい?
// return String.format("(" + valueFormat + "," + valueFormat + ")", this.infimum, this.supremum); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber[] createArray(int size) {
// return new DoubleComplexIntervalNumber[size];
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber[][] createArray(int rowSize, int columnSize) {
// return new DoubleComplexIntervalNumber[rowSize][columnSize];
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber createZero() {
// return new DoubleComplexIntervalNumber(this.infimum.createZero());
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isZero() {
// return this.infimum.isZero() && this.supremum.isZero();
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber ceil() {
// return new DoubleComplexIntervalNumber(this.infimum.ceil(), this.supremum.ceil());
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber fix() {
// return new DoubleComplexIntervalNumber(this.infimum.fix(), this.supremum.fix());
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber floor() {
// return new DoubleComplexIntervalNumber(this.infimum.floor(), this.supremum.floor());
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber round() {
// return new DoubleComplexIntervalNumber(this.infimum.round(), this.supremum.round());
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber roundToZero(double tolerance) {
// return new DoubleComplexIntervalNumber(this.infimum.roundToZero(tolerance), this.supremum.roundToZero(tolerance));
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber roundToZero(DoubleComplexIntervalNumber tolerance) {
// return new DoubleComplexIntervalNumber(this.infimum.roundToZero(tolerance), this.supremum.roundToZero(tolerance));
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber abs() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// double abs = this.middle.abs().doubleValue();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// double inf = abs + this.radius;
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// double sup = abs + this.radius;
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleIntervalNumber(inf, sup);
// }
//
// // TODO 三角関数の逆関数をちゃんとした精度保証付きで実装する
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber acos() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber inf = this.infimum.acos();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber sup = this.supremum.acos();
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(inf, sup);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber asin() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber inf = this.infimum.asin();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber sup = this.supremum.asin();
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(inf, sup);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber atan() {
// RoundModeManager manager = RoundModeManager.getManager();
// RoundMode oldRoundMode = manager.getRoundMode();
//
// manager.setRoundMode(RoundMode.ROUND_DOWN);
// DoubleComplexNumber inf = this.infimum.atan();
//
// manager.setRoundMode(RoundMode.ROUND_UP);
// DoubleComplexNumber sup = this.supremum.atan();
//
// manager.setRoundMode(oldRoundMode);
// return new DoubleComplexIntervalNumber(inf, sup);
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber exp() {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber log() {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public DoubleComplexIntervalNumber sqr() {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public void printInfSupByBit() {
// throw new RuntimeException("Not implemented"); //$NON-NLS-1$
// }
//
// /**
// * {@inheritDoc}
// */
// public boolean isPointScalar() {
// return this.radius == 0;
// }
}