| Modifier and Type | Field and Description |
|---|---|
| private static final String | POW_TRAP
Name for traps triggered by pow. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static Dfp | |
| public static Dfp | |
| public static Dfp | Returns: atan(a)number from which arc-tangent is desired a)computes the arc tangent of the argument Uses the typical taylor series but may reduce arguments using the following identity tan(x+y) = (tan(x) + tan(y)) / (1 - tan(x)*tan(y)) since tan(PI/8) = sqrt(2)-1, atan(x) = atan( (x - sqrt(2) + 1) / (1+x*sqrt(2) - x) + PI/8.0 |
| protected static Dfp | Returns: atan(a)number from which arc-tangent is desired a)computes the arc-tangent of the argument. |
| public static Dfp | |
| protected static Dfp | Returns: cos(a)number from which cosine is desired, in split form a)Computes cos(a) Used when 0 < a < pi/4. |
| public static Dfp | |
| protected static Dfp | |
| public static Dfp | |
| protected static Dfp[] | Returns: log(a)number from which logarithm is requested, in split form a)Computes the natural log of a number between 0 and 2. |
| public static Dfp | |
| public static Dfp | |
| public static Dfp | |
| protected static Dfp | Returns: sin(a)number from which sine is desired, in split form a)Computes sin(a) Used when 0 < a < pi/4. |
| protected static Dfp[] | |
| protected static Dfp[] | |
| protected static Dfp[] | |
| protected static Dfp[] | |
| protected static Dfp | |
| public static Dfp |
| POW_TRAP | back to summary |
|---|---|
| private static final String POW_TRAP Name for traps triggered by pow. | |
| DfpMath | back to summary |
|---|---|
| private DfpMath() Private Constructor. | |
| acos | back to summary |
|---|---|
| public static Dfp acos(Dfp a) computes the arc-cosine of the argument. | |
| asin | back to summary |
|---|---|
| public static Dfp asin(final Dfp a) computes the arc-sine of the argument. | |
| atan | back to summary |
|---|---|
| public static Dfp atan(final Dfp a) computes the arc tangent of the argument Uses the typical taylor series but may reduce arguments using the following identity tan(x+y) = (tan(x) + tan(y)) / (1 - tan(x)*tan(y)) since tan(PI/8) = sqrt(2)-1, atan(x) = atan( (x - sqrt(2) + 1) / (1+x*sqrt(2) - x) + PI/8.0 | |
| atanInternal | back to summary |
|---|---|
| protected static Dfp atanInternal(final Dfp a) computes the arc-tangent of the argument. | |
| cos | back to summary |
|---|---|
| public static Dfp cos(Dfp a) computes the cosine of the argument. | |
| cosInternal | back to summary |
|---|---|
| protected static Dfp cosInternal(Dfp[] a) Computes cos(a) Used when 0 < a < pi/4. Uses the classic Taylor series for cosine. 1 - x**2/2! + x**4/4! ... | |
| exp | back to summary |
|---|---|
| public static Dfp exp(final Dfp a) Computes e to the given power. a is broken into two parts, such that a = n+m where n is an integer. We use pow() to compute en and a Taylor series to compute em. We return e*n × em | |
| expInternal | back to summary |
|---|---|
| protected static Dfp expInternal(final Dfp a) Computes e to the given power. Where -1 < a < 1. Use the classic Taylor series. 1 + x**2/2! + x**3/3! + x**4/4! ... | |
| log | back to summary |
|---|---|
| public static Dfp log(Dfp a) Returns the natural logarithm of a. a is first split into three parts such that a = (10000^h)(2^j)k. ln(a) is computed by ln(a) = ln(5)*h + ln(2)*(h+j) + ln(k) k is in the range 2/3 < k <4/3 and is passed on to a series expansion. | |
| logInternal | back to summary |
|---|---|
| protected static Dfp[] logInternal(final Dfp[] a) Computes the natural log of a number between 0 and 2. Let f(x) = ln(x), We know that f'(x) = 1/x, thus from Taylor's theorum we have: ----- n+1 n f(x) = \ (-1) (x - 1) / ---------------- for 1 <= n <= infinity ----- n or 2 3 4 (x-1) (x-1) (x-1) ln(x) = (x-1) - ----- + ------ - ------ + ... 2 3 4 alternatively, 2 3 4 x x x ln(x+1) = x - - + - - - + ... 2 3 4 This series can be used to compute ln(x), but it converges too slowly. If we substitute -x for x above, we get 2 3 4 x x x ln(1-x) = -x - - - - - - + ... 2 3 4 Note that all terms are now negative. Because the even powered ones absorbed the sign. Now, subtract the series above from the previous one to get ln(x+1) - ln(1-x). Note the even terms cancel out leaving only the odd ones 3 5 7 2x 2x 2x ln(x+1) - ln(x-1) = 2x + --- + --- + ---- + ... 3 5 7 By the property of logarithms that ln(a) - ln(b) = ln (a/b) we have: 3 5 7 x+1 / x x x \ ln ----- = 2 * | x + ---- + ---- + ---- + ... | x-1 \ 3 5 7 / But now we want to find ln(a), so we need to find the value of x such that a = (x+1)/(x-1). This is easily solved to find that x = (a-1)/(a+1). | |
| pow | back to summary |
|---|---|
| public static Dfp pow(Dfp base, int a) Raises base to the power a by successive squaring. | |
| pow | back to summary |
|---|---|
| public static Dfp pow(Dfp x, final Dfp y) Computes x to the y power. Uses the following method:
Special Cases
| |
| sin | back to summary |
|---|---|
| public static Dfp sin(final Dfp a) computes the sine of the argument. | |
| sinInternal | back to summary |
|---|---|
| protected static Dfp sinInternal(Dfp[] a) Computes sin(a) Used when 0 < a < pi/4. Uses the classic Taylor series. x - x**3/3! + x**5/5! ... | |
| split | back to summary |
|---|---|
| protected static Dfp[] split(final DfpField field, final String a) Breaks a string representation up into two dfp's. The two dfp are such that the sum of them is equivalent to the input string, but has higher precision than using a single dfp. This is useful for improving accuracy of exponentiation and critical multiplies. | |
| split | back to summary |
|---|---|
| protected static Dfp[] split(final Dfp a) Splits a | |
| splitDiv | back to summary |
|---|---|
| protected static Dfp[] splitDiv(final Dfp[] a, final Dfp[] b) Divide two numbers that are split in to two pieces that are meant to be added together. Inverse of split multiply above: (a+b) / (c+d) = (a/c) + ( (bc-ad)/(c**2+cd) ) | |
| splitMult | back to summary |
|---|---|
| protected static Dfp[] splitMult(final Dfp[] a, final Dfp[] b) Multiply two numbers that are split in to two pieces that are meant to be added together. Use binomial multiplication so ab = a0 b0 + a0 b1 + a1 b0 + a1 b1 Store the first term in result0, the rest in result1 | |
| splitPow | back to summary |
|---|---|
| protected static Dfp splitPow(final Dfp[] base, int a) Raise a split base to the a power. | |
| tan | back to summary |
|---|---|
| public static Dfp tan(final Dfp a) computes the tangent of the argument. | |