1dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond/*
2dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Licensed to the Apache Software Foundation (ASF) under one or more
3dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * contributor license agreements.  See the NOTICE file distributed with
4dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * this work for additional information regarding copyright ownership.
5dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * The ASF licenses this file to You under the Apache License, Version 2.0
6dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * (the "License"); you may not use this file except in compliance with
7dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * the License.  You may obtain a copy of the License at
8dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond *
9dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond *      http://www.apache.org/licenses/LICENSE-2.0
10dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond *
11dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Unless required by applicable law or agreed to in writing, software
12dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * distributed under the License is distributed on an "AS IS" BASIS,
13dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * See the License for the specific language governing permissions and
15dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * limitations under the License.
16dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */
17dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondpackage org.apache.commons.math.util;
18dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
19dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
20dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.io.Serializable;
21dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.math.BigDecimal;
22dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.math.BigInteger;
23dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.math.MathContext;
24dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport java.math.RoundingMode;
25dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
26dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport org.apache.commons.math.Field;
27dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondimport org.apache.commons.math.FieldElement;
28dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
29dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond/**
30dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * Arbitrary precision decimal number.
31dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * <p>
32dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * This class is a simple wrapper around the standard <code>BigDecimal</code>
33dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * in order to implement the {@link FieldElement} interface.
34dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * </p>
35dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @since 2.0
36dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond * @version $Revision: 925812 $ $Date: 2010-03-21 16:49:31 +0100 (dim. 21 mars 2010) $
37dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond */
38dee0849a9704d532af0b550146cbafbaa6ee1d19Raymondpublic class BigReal implements FieldElement<BigReal>, Comparable<BigReal>, Serializable {
39dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
40dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** A big real representing 0. */
41dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public static final BigReal ZERO = new BigReal(BigDecimal.ZERO);
42dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
43dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** A big real representing 1. */
44dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public static final BigReal ONE = new BigReal(BigDecimal.ONE);
45dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
46dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Serializable version identifier. */
47dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    private static final long serialVersionUID = 4984534880991310382L;
48dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
49dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Underlying BigDecimal. */
50dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    private final BigDecimal d;
51dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
52dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Rounding mode for divisions. **/
53dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    private RoundingMode roundingMode = RoundingMode.HALF_UP;
54dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
55dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /*** BigDecimal scale ***/
56dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    private int scale = 64;
57dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
58dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a BigDecimal.
59dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
60dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
61dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(BigDecimal val) {
62dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d =  val;
63dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
64dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
65dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a BigInteger.
66dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
67dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
68dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(BigInteger val) {
69dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val);
70dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
71dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
72dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from an unscaled BigInteger.
73dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param unscaledVal unscaled value
74dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param scale scale to use
75dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
76dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(BigInteger unscaledVal, int scale) {
77dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(unscaledVal, scale);
78dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
79dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
80dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from an unscaled BigInteger.
81dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param unscaledVal unscaled value
82dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param scale scale to use
83dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc to used
84dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
85dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(BigInteger unscaledVal, int scale, MathContext mc) {
86dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(unscaledVal, scale, mc);
87dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
88dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
89dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a BigInteger.
90dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
91dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc context to use
92dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
93dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(BigInteger val, MathContext mc) {
94dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val, mc);
95dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
96dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
97dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a characters representation.
98dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param in character representation of the value
99dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
100dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(char[] in) {
101dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(in);
102dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
103dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
104dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a characters representation.
105dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param in character representation of the value
106dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param offset offset of the first character to analyze
107dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param len length of the array slice to analyze
108dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
109dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(char[] in, int offset, int len) {
110dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(in, offset, len);
111dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
112dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
113dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a characters representation.
114dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param in character representation of the value
115dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param offset offset of the first character to analyze
116dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param len length of the array slice to analyze
117dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc context to use
118dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
119dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(char[] in, int offset, int len, MathContext mc) {
120dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(in, offset, len, mc);
121dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
122dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
123dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a characters representation.
124dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param in character representation of the value
125dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc context to use
126dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
127dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(char[] in, MathContext mc) {
128dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(in, mc);
129dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
130dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
131dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a double.
132dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
133dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
134dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(double val) {
135dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val);
136dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
137dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
138dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a double.
139dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
140dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc context to use
141dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
142dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(double val, MathContext mc) {
143dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val, mc);
144dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
145dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
146dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from an int.
147dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
148dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
149dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(int val) {
150dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val);
151dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
152dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
153dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from an int.
154dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
155dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc context to use
156dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
157dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(int val, MathContext mc) {
158dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val, mc);
159dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
160dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
161dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a long.
162dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
163dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
164dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(long val) {
165dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val);
166dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
167dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
168dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a long.
169dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val value of the instance
170dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc context to use
171dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
172dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(long val, MathContext mc) {
173dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val, mc);
174dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
175dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
176dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a String representation.
177dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val character representation of the value
178dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
179dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(String val) {
180dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val);
181dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
182dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
183dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Build an instance from a String representation.
184dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param val character representation of the value
185dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param mc context to use
186dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
187dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal(String val, MathContext mc)  {
188dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        d = new BigDecimal(val, mc);
189dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
190dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
191dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /***
192dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * Gets the rounding mode for division operations
193dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * The default is {@code RoundingMode.HALF_UP}
194dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @return the rounding mode.
195dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @since 2.1
196dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
197dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public RoundingMode getRoundingMode() {
198dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return roundingMode;
199dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
200dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
201dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /***
202dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * Sets the rounding mode for decimal divisions.
203dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param roundingMode rounding mode for decimal divisions
204dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @since 2.1
205dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
206dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public void setRoundingMode(RoundingMode roundingMode) {
207dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        this.roundingMode = roundingMode;
208dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
209dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
210dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /***
211dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * Sets the scale for division operations.
212dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * The default is 64
213dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @return the scale
214dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @since 2.1
215dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
216dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public int getScale() {
217dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return scale;
218dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
219dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
220dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /***
221dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * Sets the scale for division operations.
222dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @param scale scale for division operations
223dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @since 2.1
224dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
225dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public void setScale(int scale) {
226dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        this.scale = scale;
227dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
228dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
229dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
230dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal add(BigReal a) {
231dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return new BigReal(d.add(a.d));
232dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
233dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
234dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
235dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal subtract(BigReal a) {
236dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return new BigReal(d.subtract(a.d));
237dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
238dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
239dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
240dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal divide(BigReal a) throws ArithmeticException {
241dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return new BigReal(d.divide(a.d, scale, roundingMode));
242dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
243dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
244dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
245dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigReal multiply(BigReal a) {
246dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return new BigReal(d.multiply(a.d));
247dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
248dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
249dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
250dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public int compareTo(BigReal a) {
251dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return d.compareTo(a.d);
252dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
253dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
254dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Get the double value corresponding to the instance.
255dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @return double value corresponding to the instance
256dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
257dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public double doubleValue() {
258dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return d.doubleValue();
259dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
260dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
261dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** Get the BigDecimal value corresponding to the instance.
262dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     * @return BigDecimal value corresponding to the instance
263dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond     */
264dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public BigDecimal bigDecimalValue() {
265dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return d;
266dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
267dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
268dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
269dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    @Override
270dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public boolean equals(Object other) {
271dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        if (this == other){
272dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond            return true;
273dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        }
274dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
275dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        if (other instanceof BigReal){
276dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond            return d.equals(((BigReal) other).d);
277dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        }
278dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return false;
279dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
280dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
281dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
282dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    @Override
283dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public int hashCode() {
284dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return d.hashCode();
285dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
286dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
287dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    /** {@inheritDoc} */
288dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    public Field<BigReal> getField() {
289dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond        return BigRealField.getInstance();
290dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond    }
291dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond
292dee0849a9704d532af0b550146cbafbaa6ee1d19Raymond}
293