| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.commons.numbers.complex; |
| |
| import org.junit.jupiter.api.Assertions; |
| import org.junit.jupiter.api.Test; |
| |
| import java.util.function.BiFunction; |
| import java.util.function.Supplier; |
| import java.util.function.UnaryOperator; |
| |
| /** |
| * Tests the functions defined by the C.99 standard for complex numbers |
| * defined in ISO/IEC 9899, Annex G. |
| * |
| * <p>The test data is generated from a known implementation of the standard: GNU g++. |
| * |
| * @see <a href="http://www.open-std.org/JTC1/SC22/WG14/www/standards"> |
| * ISO/IEC 9899 - Programming languages - C</a> |
| */ |
| public class CReferenceTest { |
| private static final double inf = Double.POSITIVE_INFINITY; |
| private static final double nan = Double.NaN; |
| |
| /** |
| * Assert the two numbers are equal within the provided units of least precision. |
| * The maximum count of numbers allowed between the two values is {@code maxUlps - 1}. |
| * |
| * @param msg the failure message |
| * @param expected the expected |
| * @param actual the actual |
| * @param maxUlps the maximum units of least precision between the two values |
| */ |
| private static void assertEquals(Supplier<String> msg, double expected, double actual, long maxUlps) { |
| final long e = Double.doubleToLongBits(expected); |
| final long a = Double.doubleToLongBits(actual); |
| final long delta = Math.abs(e - a); |
| if (delta > maxUlps) { |
| // DEBUG: |
| if (maxUlps < 0) { |
| // CHECKSTYLE: stop Regex |
| System.out.printf("%s: %s != %s (ulps=%d)%n", msg.get(), expected, actual, delta); |
| // CHECKSTYLE: resume Regex |
| } else { |
| Assertions.fail(String.format("%s: %s != %s (ulps=%d)", msg.get(), expected, actual, delta)); |
| } |
| } |
| } |
| |
| /** |
| * Assert the operation on the complex number is equal to the expected value. |
| * |
| * <p>The results are are considered equal if there are no floating-point values between them. |
| * |
| * @param a Real part. |
| * @param b Imaginary part. |
| * @param operation the operation |
| * @param x Expected real part. |
| * @param y Expected imaginary part. |
| */ |
| private static void assertComplex(double a, double b, |
| UnaryOperator<Complex> operation, |
| double x, double y) { |
| assertComplex(a, b, operation, x, y, 1); |
| } |
| |
| /** |
| * Assert the operation on the complex number is equal to the expected value. |
| * |
| * <p>The results are considered equal within the provided units of least |
| * precision. The maximum count of numbers allowed between the two values is |
| * {@code maxUlps - 1}. |
| * |
| * @param a Real part. |
| * @param b Imaginary part. |
| * @param operation the operation |
| * @param x Expected real part. |
| * @param y Expected imaginary part. |
| * @param maxUlps the maximum units of least precision between the two values |
| */ |
| private static void assertComplex(double a, double b, |
| UnaryOperator<Complex> operation, |
| double x, double y, long maxUlps) { |
| final Complex c = Complex.ofCartesian(a, b); |
| final Complex z = operation.apply(c); |
| assertEquals(() -> c + ": real", x, z.getReal(), maxUlps); |
| assertEquals(() -> c + ": imaginary", y, z.getImaginary(), maxUlps); |
| } |
| |
| /** |
| * Assert the operation on the complex numbers is equal to the expected value. |
| * |
| * <p>The results are considered equal if there are no floating-point values between them. |
| * |
| * @param a Real part of first number. |
| * @param b Imaginary part of first number. |
| * @param c Real part of second number. |
| * @param d Imaginary part of second number. |
| * @param operation the operation |
| * @param x Expected real part. |
| * @param y Expected imaginary part. |
| */ |
| private static void assertComplex(double a, double b, double c, double d, |
| BiFunction<Complex, Complex, Complex> operation, |
| double x, double y) { |
| assertComplex(a, b, c, d, operation, x, y, 1); |
| } |
| |
| /** |
| * Assert the operation on the complex numbers is equal to the expected value. |
| * |
| * <p>The results are considered equal within the provided units of least |
| * precision. The maximum count of numbers allowed between the two values is |
| * {@code maxUlps - 1}. |
| * |
| * @param a Real part of first number. |
| * @param b Imaginary part of first number. |
| * @param c Real part of second number. |
| * @param d Imaginary part of second number. |
| * @param operation the operation |
| * @param x Expected real part. |
| * @param y Expected imaginary part. |
| * @param maxUlps the maximum units of least precision between the two values |
| */ |
| // CHECKSTYLE: stop ParameterNumberCheck |
| private static void assertComplex(double a, double b, double c, double d, |
| BiFunction<Complex, Complex, Complex> operation, |
| double x, double y, long maxUlps) { |
| final Complex c1 = Complex.ofCartesian(a, b); |
| final Complex c2 = Complex.ofCartesian(c, d); |
| final Complex z = operation.apply(c1, c2); |
| assertEquals(() -> c1 + " op " + c2 + ": real", x, z.getReal(), maxUlps); |
| assertEquals(() -> c1 + " op " + c2 + ": imaginary", y, z.getImaginary(), maxUlps); |
| } |
| |
| @Test |
| public void testAcos() { |
| // assertComplex(-1e+308, 0.0, Complex::acos, nan, -inf); |
| // assertComplex(-1e+308, 0.5, Complex::acos, 0.78539816339744828, -inf); |
| // assertComplex(-1e+308, 1, Complex::acos, 0.78539816339744828, -inf); |
| // assertComplex(-1e+308, 2, Complex::acos, 0.78539816339744828, -inf); |
| assertComplex(-1e+308, 1e+308, Complex::acos, 0.78539816339744828, -inf); |
| assertComplex(-2, 0.0, Complex::acos, 3.1415926535897931, -1.3169578969248164); |
| assertComplex(-2, 0.5, Complex::acos, 2.8638383970320791, -1.3618009008578467, 3); |
| assertComplex(-2, 1, Complex::acos, 2.6342363503726487, -1.4693517443681854); |
| assertComplex(-2, 2, Complex::acos, 2.3250454714929427, -1.7343245214879679); |
| assertComplex(-2, 1e+308, Complex::acos, 0.78539816339744828, -inf); |
| assertComplex(-1, 0.0, Complex::acos, 3.1415926535897931, -0.0); |
| assertComplex(-1, 0.5, Complex::acos, 2.4667038080037869, -0.73285767597364526); |
| assertComplex(-1, 1, Complex::acos, 2.2370357592874122, -1.0612750619050364, 4); |
| assertComplex(-1, 2, Complex::acos, 1.997874913187373, -1.5285709194809995, 9); |
| assertComplex(-1, 1e+308, Complex::acos, 0.78539816339744828, -inf); |
| assertComplex(-0.5, 0.0, Complex::acos, 2.0943951023931953, -1.1102230246251565e-16); |
| assertComplex(-0.5, 0.5, Complex::acos, 2.023074773946087, -0.53063753095251776); |
| assertComplex(-0.5, 1, Complex::acos, 1.9202353896521094, -0.92613303135018232, 2); |
| assertComplex(-0.5, 2, Complex::acos, 1.7918149624177808, -1.4657153519472903, 2); |
| assertComplex(-0.5, 1e+308, Complex::acos, 1.5707963267948966, -inf); |
| assertComplex(-0.0, 0.0, Complex::acos, 1.5707963267948966, -0.0); |
| assertComplex(-0.0, 0.5, Complex::acos, 1.5707963267948966, -0.48121182505960336); |
| assertComplex(-0.0, 1, Complex::acos, 1.5707963267948963, -0.88137358701954283); |
| assertComplex(-0.0, 2, Complex::acos, 1.5707963267948959, -1.4436354751788099, 3); |
| assertComplex(-0.0, 1e+308, Complex::acos, 1.5707963267948966, -inf); |
| assertComplex(0.0, 0.0, Complex::acos, 1.5707963267948966, -0.0); |
| assertComplex(0.0, 0.5, Complex::acos, 1.5707963267948966, -0.48121182505960347, 2); |
| assertComplex(0.0, 1, Complex::acos, 1.5707963267948966, -0.88137358701954294); |
| assertComplex(0.0, 2, Complex::acos, 1.5707963267948966, -1.4436354751788103, 2); |
| assertComplex(0.0, 1e+308, Complex::acos, 1.5707963267948966, -inf); |
| assertComplex(0.5, 0.0, Complex::acos, 1.0471975511965976, -1.1102230246251565e-16); |
| assertComplex(0.5, 0.5, Complex::acos, 1.1185178796437059, -0.53063753095251787); |
| assertComplex(0.5, 1, Complex::acos, 1.2213572639376833, -0.92613303135018255, 2); |
| assertComplex(0.5, 2, Complex::acos, 1.3497776911720127, -1.4657153519472905); |
| assertComplex(0.5, 1e+308, Complex::acos, 1.5707963267948966, -inf); |
| assertComplex(1, 0.0, Complex::acos, 0.0, -0.0); |
| assertComplex(1, 0.5, Complex::acos, 0.67488884558600637, -0.73285767597364526); |
| assertComplex(1, 1, Complex::acos, 0.90455689430238129, -1.0612750619050355); |
| assertComplex(1, 2, Complex::acos, 1.1437177404024204, -1.528570919480998, 2); |
| // assertComplex(1, 1e+308, Complex::acos, 0.78539816339744828, -inf); |
| assertComplex(2, 0.0, Complex::acos, 0.0, -1.3169578969248166); |
| assertComplex(2, 0.5, Complex::acos, 0.27775425655771396, -1.3618009008578458); |
| assertComplex(2, 1, Complex::acos, 0.50735630321714453, -1.4693517443681852); |
| assertComplex(2, 2, Complex::acos, 0.8165471820968504, -1.7343245214879663, 7); |
| // assertComplex(2, 1e+308, Complex::acos, 0.78539816339744828, -inf); |
| // assertComplex(1e+308, 0.0, Complex::acos, nan, -inf); |
| // assertComplex(1e+308, 0.5, Complex::acos, 0.78539816339744828, -inf); |
| // assertComplex(1e+308, 1, Complex::acos, 0.78539816339744828, -inf); |
| // assertComplex(1e+308, 2, Complex::acos, 0.78539816339744828, -inf); |
| // assertComplex(1e+308, 1e+308, Complex::acos, 0.78539816339744828, -inf); |
| } |
| |
| @Test |
| public void testAcosh() { |
| // assertComplex(-1e+308, 0.0, Complex::acosh, inf, nan); |
| // assertComplex(-1e+308, 0.5, Complex::acosh, inf, 0.78539816339744828); |
| // assertComplex(-1e+308, 1, Complex::acosh, inf, 0.78539816339744828); |
| // assertComplex(-1e+308, 2, Complex::acosh, inf, 0.78539816339744828); |
| assertComplex(-1e+308, 1e+308, Complex::acosh, inf, 0.78539816339744828); |
| assertComplex(-2, 0.0, Complex::acosh, 1.3169578969248164, 3.1415926535897931); |
| assertComplex(-2, 0.5, Complex::acosh, 1.3618009008578467, 2.8638383970320791, 3); |
| assertComplex(-2, 1, Complex::acosh, 1.4693517443681854, 2.6342363503726487); |
| assertComplex(-2, 2, Complex::acosh, 1.7343245214879679, 2.3250454714929427); |
| assertComplex(-2, 1e+308, Complex::acosh, inf, 0.78539816339744828); |
| assertComplex(-1, 0.0, Complex::acosh, 0.0, 3.1415926535897931); |
| assertComplex(-1, 0.5, Complex::acosh, 0.73285767597364526, 2.4667038080037869); |
| assertComplex(-1, 1, Complex::acosh, 1.0612750619050364, 2.2370357592874122, 4); |
| assertComplex(-1, 2, Complex::acosh, 1.5285709194809995, 1.997874913187373, 9); |
| assertComplex(-1, 1e+308, Complex::acosh, inf, 0.78539816339744828); |
| assertComplex(-0.5, 0.0, Complex::acosh, 1.1102230246251565e-16, 2.0943951023931953); |
| assertComplex(-0.5, 0.5, Complex::acosh, 0.53063753095251776, 2.023074773946087); |
| assertComplex(-0.5, 1, Complex::acosh, 0.92613303135018232, 1.9202353896521094, 2); |
| assertComplex(-0.5, 2, Complex::acosh, 1.4657153519472903, 1.7918149624177808, 2); |
| assertComplex(-0.5, 1e+308, Complex::acosh, inf, 1.5707963267948966); |
| assertComplex(-0.0, 0.0, Complex::acosh, 0.0, 1.5707963267948966); |
| assertComplex(-0.0, 0.5, Complex::acosh, 0.48121182505960336, 1.5707963267948966); |
| assertComplex(-0.0, 1, Complex::acosh, 0.88137358701954283, 1.5707963267948963); |
| assertComplex(-0.0, 2, Complex::acosh, 1.4436354751788099, 1.5707963267948959, 3); |
| assertComplex(-0.0, 1e+308, Complex::acosh, inf, 1.5707963267948966); |
| assertComplex(0.0, 0.0, Complex::acosh, 0.0, 1.5707963267948966); |
| assertComplex(0.0, 0.5, Complex::acosh, 0.48121182505960347, 1.5707963267948966, 2); |
| assertComplex(0.0, 1, Complex::acosh, 0.88137358701954294, 1.5707963267948966); |
| assertComplex(0.0, 2, Complex::acosh, 1.4436354751788103, 1.5707963267948966, 2); |
| assertComplex(0.0, 1e+308, Complex::acosh, inf, 1.5707963267948966); |
| assertComplex(0.5, 0.0, Complex::acosh, 1.1102230246251565e-16, 1.0471975511965976); |
| assertComplex(0.5, 0.5, Complex::acosh, 0.53063753095251787, 1.1185178796437059); |
| assertComplex(0.5, 1, Complex::acosh, 0.92613303135018255, 1.2213572639376833, 2); |
| assertComplex(0.5, 2, Complex::acosh, 1.4657153519472905, 1.3497776911720127); |
| assertComplex(0.5, 1e+308, Complex::acosh, inf, 1.5707963267948966); |
| assertComplex(1, 0.0, Complex::acosh, 0.0, 0.0); |
| assertComplex(1, 0.5, Complex::acosh, 0.73285767597364526, 0.67488884558600637); |
| assertComplex(1, 1, Complex::acosh, 1.0612750619050355, 0.90455689430238129); |
| assertComplex(1, 2, Complex::acosh, 1.528570919480998, 1.1437177404024204, 2); |
| // assertComplex(1, 1e+308, Complex::acosh, inf, 0.78539816339744828); |
| assertComplex(2, 0.0, Complex::acosh, 1.3169578969248166, 0.0); |
| assertComplex(2, 0.5, Complex::acosh, 1.3618009008578458, 0.27775425655771396); |
| assertComplex(2, 1, Complex::acosh, 1.4693517443681852, 0.50735630321714453, 7); |
| assertComplex(2, 2, Complex::acosh, 1.7343245214879663, 0.8165471820968504, 7); |
| // assertComplex(1e+308, 0.0, Complex::acosh, inf, nan); |
| // assertComplex(1e+308, 0.5, Complex::acosh, inf, 0.78539816339744828); |
| // assertComplex(1e+308, 1, Complex::acosh, inf, 0.78539816339744828); |
| // assertComplex(1e+308, 2, Complex::acosh, inf, 0.78539816339744828); |
| // assertComplex(1e+308, 1e+308, Complex::acosh, inf, 0.78539816339744828); |
| } |
| |
| @Test |
| public void testAsinh() { |
| // assertComplex(-1e+308, 0.0, Complex::asinh, -inf, nan); |
| // assertComplex(-1e+308, 0.5, Complex::asinh, -inf, 0.78539816339744828); |
| // assertComplex(-1e+308, 1, Complex::asinh, -inf, 0.78539816339744828); |
| // assertComplex(-1e+308, 2, Complex::asinh, -inf, 0.78539816339744828); |
| assertComplex(-1e+308, 1e+308, Complex::asinh, -inf, 0.78539816339744828); |
| assertComplex(-2, 0.0, Complex::asinh, -1.4436354751788099, 0.0, 2); |
| assertComplex(-2, 0.5, Complex::asinh, -1.4657153519472903, 0.22101863562288368, 6); |
| assertComplex(-2, 1, Complex::asinh, -1.5285709194809995, 0.42707858639247681, 12); |
| assertComplex(-2, 2, Complex::asinh, -1.7343245214879652, 0.75424914469804549, 6); |
| assertComplex(-2, 1e+308, Complex::asinh, -inf, 0.78539816339744828); |
| assertComplex(-1, 0.0, Complex::asinh, -0.88137358701954283, 0.0); |
| assertComplex(-1, 0.5, Complex::asinh, -0.92613303135018232, 0.34943906285721327, 2); |
| assertComplex(-1, 1, Complex::asinh, -1.0612750619050355, 0.66623943249251527); |
| assertComplex(-1, 2, Complex::asinh, -1.4693517443681841, 1.0634400235777519, 5); |
| assertComplex(-1, 1e+308, Complex::asinh, -inf, 0.78539816339744828); |
| assertComplex(-0.5, 0.0, Complex::asinh, -0.48121182505960336, 0.0, 2); |
| assertComplex(-0.5, 0.5, Complex::asinh, -0.53063753095251776, 0.4522784471511907); |
| assertComplex(-0.5, 1, Complex::asinh, -0.73285767597364526, 0.89590748120889041, 2); |
| assertComplex(-0.5, 2, Complex::asinh, -1.3618009008578469, 1.2930420702371832, 5); |
| assertComplex(-0.5, 1e+308, Complex::asinh, -inf, 1.5707963267948966); |
| assertComplex(-0.0, 0.0, Complex::asinh, -0.0, 0.0); |
| assertComplex(-0.0, 0.5, Complex::asinh, -1.1102230246251565e-16, 0.52359877559829893); |
| assertComplex(-0.0, 1, Complex::asinh, -0.0, 1.5707963267948966); |
| assertComplex(-0.0, 2, Complex::asinh, -1.3169578969248164, 1.5707963267948961, 2); |
| assertComplex(-0.0, 1e+308, Complex::asinh, -inf, 1.5707963267948966); |
| assertComplex(0.0, 0.0, Complex::asinh, 0.0, 0.0); |
| assertComplex(0.0, 0.5, Complex::asinh, 1.1102230246251565e-16, 0.52359877559829893); |
| assertComplex(0.0, 1, Complex::asinh, 0.0, 1.5707963267948966); |
| assertComplex(0.0, 2, Complex::asinh, 1.3169578969248166, 1.5707963267948966); |
| assertComplex(0.0, 1e+308, Complex::asinh, inf, 1.5707963267948966); |
| assertComplex(0.5, 0.0, Complex::asinh, 0.48121182505960347, 0.0); |
| assertComplex(0.5, 0.5, Complex::asinh, 0.53063753095251787, 0.45227844715119064); |
| assertComplex(0.5, 1, Complex::asinh, 0.73285767597364526, 0.8959074812088903); |
| assertComplex(0.5, 2, Complex::asinh, 1.3618009008578458, 1.2930420702371828); |
| assertComplex(0.5, 1e+308, Complex::asinh, inf, 1.5707963267948966); |
| assertComplex(1, 0.0, Complex::asinh, 0.88137358701954294, 0.0); |
| assertComplex(1, 0.5, Complex::asinh, 0.92613303135018255, 0.34943906285721327); |
| assertComplex(1, 1, Complex::asinh, 1.0612750619050357, 0.66623943249251527); |
| assertComplex(1, 2, Complex::asinh, 1.4693517443681852, 1.0634400235777519); |
| assertComplex(1, 1e+308, Complex::asinh, inf, 0.78539816339744828); |
| assertComplex(2, 0.0, Complex::asinh, 1.4436354751788103, 0.0); |
| assertComplex(2, 0.5, Complex::asinh, 1.4657153519472905, 0.22101863562288387); |
| assertComplex(2, 1, Complex::asinh, 1.528570919480998, 0.42707858639247614); |
| assertComplex(2, 2, Complex::asinh, 1.7343245214879663, 0.75424914469804605); |
| assertComplex(2, 1e+308, Complex::asinh, inf, 0.78539816339744828); |
| // assertComplex(1e+308, 0.0, Complex::asinh, inf, nan); |
| // assertComplex(1e+308, 0.5, Complex::asinh, inf, 0.78539816339744828); |
| // assertComplex(1e+308, 1, Complex::asinh, inf, 0.78539816339744828); |
| // assertComplex(1e+308, 2, Complex::asinh, inf, 0.78539816339744828); |
| assertComplex(1e+308, 1e+308, Complex::asinh, inf, 0.78539816339744828); |
| } |
| |
| @Test |
| public void testAtanh() { |
| assertComplex(-1e+308, 0.0, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(-1e+308, 0.5, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(-1e+308, 1, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(-1e+308, 2, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(-1e+308, 1e+308, Complex::atanh, -inf, 1.5707963267948966); |
| assertComplex(-2, 0.0, Complex::atanh, -0.54930614433405489, 1.5707963267948966); |
| assertComplex(-2, 0.5, Complex::atanh, -0.50037000005253107, 1.4215468610018069); |
| assertComplex(-2, 1, Complex::atanh, -0.40235947810852507, 1.3389725222944935); |
| assertComplex(-2, 2, Complex::atanh, -0.23887786125685917, 1.311223269671635, 4); |
| assertComplex(-2, 1e+308, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(-1, 0.0, Complex::atanh, -inf, 0.0); |
| assertComplex(-1, 0.5, Complex::atanh, -0.70830333601405404, 0.90788749496088039); |
| assertComplex(-1, 1, Complex::atanh, -0.40235947810852507, 1.0172219678978514); |
| assertComplex(-1, 2, Complex::atanh, -0.17328679513998629, 1.1780972450961724, 2); |
| assertComplex(-1, 1e+308, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(-0.5, 0.0, Complex::atanh, -0.54930614433405489, 0.0); |
| assertComplex(-0.5, 0.5, Complex::atanh, -0.40235947810852507, 0.5535743588970452); |
| assertComplex(-0.5, 1, Complex::atanh, -0.23887786125685906, 0.84757566067082901, 2); |
| assertComplex(-0.5, 2, Complex::atanh, -0.096415620202996155, 1.1265564408348223, 3); |
| assertComplex(-0.5, 1e+308, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(-0.0, 0.0, Complex::atanh, -0.0, 0.0); |
| assertComplex(-0.0, 0.5, Complex::atanh, -0.0, 0.46364760900080615); |
| assertComplex(-0.0, 1, Complex::atanh, -0.0, 0.78539816339744828); |
| assertComplex(-0.0, 2, Complex::atanh, -0.0, 1.1071487177940904); |
| assertComplex(-0.0, 1e+308, Complex::atanh, -0.0, 1.5707963267948966); |
| assertComplex(0.0, 0.0, Complex::atanh, 0.0, 0.0); |
| assertComplex(0.0, 0.5, Complex::atanh, 0.0, 0.46364760900080615); |
| assertComplex(0.0, 1, Complex::atanh, 0.0, 0.78539816339744828); |
| assertComplex(0.0, 2, Complex::atanh, 0.0, 1.1071487177940904); |
| assertComplex(0.0, 1e+308, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(0.5, 0.0, Complex::atanh, 0.54930614433405489, 0.0); |
| assertComplex(0.5, 0.5, Complex::atanh, 0.40235947810852513, 0.5535743588970452); |
| assertComplex(0.5, 1, Complex::atanh, 0.23887786125685911, 0.84757566067082901); |
| assertComplex(0.5, 2, Complex::atanh, 0.096415620202996211, 1.1265564408348223, 7); |
| assertComplex(0.5, 1e+308, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(1, 0.0, Complex::atanh, inf, 0.0); |
| assertComplex(1, 0.5, Complex::atanh, 0.70830333601405404, 0.90788749496088039); |
| assertComplex(1, 1, Complex::atanh, 0.40235947810852513, 1.0172219678978514); |
| assertComplex(1, 2, Complex::atanh, 0.17328679513998635, 1.1780972450961724); |
| assertComplex(1, 1e+308, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(2, 0.0, Complex::atanh, 0.54930614433405489, 1.5707963267948966); |
| assertComplex(2, 0.5, Complex::atanh, 0.50037000005253096, 1.4215468610018069); |
| assertComplex(2, 1, Complex::atanh, 0.40235947810852513, 1.3389725222944935); |
| assertComplex(2, 2, Complex::atanh, 0.23887786125685906, 1.311223269671635); |
| assertComplex(2, 1e+308, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(1e+308, 0.0, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(1e+308, 0.5, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(1e+308, 1, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(1e+308, 2, Complex::atanh, 0.0, 1.5707963267948966); |
| assertComplex(1e+308, 1e+308, Complex::atanh, inf, 1.5707963267948966); |
| } |
| |
| @Test |
| public void testCosh() { |
| assertComplex(-1e+308, 0.0, Complex::cosh, inf, nan); |
| assertComplex(-1e+308, 0.5, Complex::cosh, inf, -inf); |
| assertComplex(-1e+308, 1, Complex::cosh, inf, -inf); |
| assertComplex(-1e+308, 2, Complex::cosh, -inf, -inf); |
| assertComplex(-1e+308, 1e+308, Complex::cosh, -inf, -inf); |
| assertComplex(-2, 0.0, Complex::cosh, 3.7621956910836314, -0.0); |
| assertComplex(-2, 0.5, Complex::cosh, 3.3016373329140944, -1.7388095044743164); |
| assertComplex(-2, 1, Complex::cosh, 2.0327230070196656, -3.0518977991517997); |
| assertComplex(-2, 2, Complex::cosh, -1.5656258353157435, -3.2978948363112366); |
| assertComplex(-2, 1e+308, Complex::cosh, -3.3532786447904863, -1.6444057804572179); |
| assertComplex(-1, 0.0, Complex::cosh, 1.5430806348152437, -0.0); |
| assertComplex(-1, 0.5, Complex::cosh, 1.3541806567045842, -0.5634214652309818); |
| assertComplex(-1, 1, Complex::cosh, 0.83373002513114913, -0.98889770576286506); |
| assertComplex(-1, 2, Complex::cosh, -0.64214812471551996, -1.0686074213827783); |
| assertComplex(-1, 1e+308, Complex::cosh, -1.375361561382608, -0.5328320968314485); |
| assertComplex(-0.5, 0.0, Complex::cosh, 1.1276259652063807, -0.0); |
| assertComplex(-0.5, 0.5, Complex::cosh, 0.9895848833999199, -0.24982639750046154); |
| assertComplex(-0.5, 1, Complex::cosh, 0.60925890915779424, -0.43848657989259532); |
| assertComplex(-0.5, 2, Complex::cosh, -0.46925797822905341, -0.473830620416407); |
| assertComplex(-0.5, 1e+308, Complex::cosh, -1.0050631011564148, -0.23626278272774978); |
| assertComplex(-0.0, 0.0, Complex::cosh, 1, 0.0); |
| assertComplex(-0.0, 0.5, Complex::cosh, 0.87758256189037276, -0.0); |
| assertComplex(-0.0, 1, Complex::cosh, 0.54030230586813977, -0.0); |
| assertComplex(-0.0, 2, Complex::cosh, -0.41614683654714241, -0.0); |
| assertComplex(-0.0, 1e+308, Complex::cosh, -0.89130893768703345, -0.0); |
| assertComplex(0.0, 0.0, Complex::cosh, 1, 0.0); |
| assertComplex(0.0, 0.5, Complex::cosh, 0.87758256189037276, 0.0); |
| assertComplex(0.0, 1, Complex::cosh, 0.54030230586813977, 0.0); |
| assertComplex(0.0, 2, Complex::cosh, -0.41614683654714241, 0.0); |
| assertComplex(0.0, 1e+308, Complex::cosh, -0.89130893768703345, 0.0); |
| assertComplex(0.5, 0.0, Complex::cosh, 1.1276259652063807, 0.0); |
| assertComplex(0.5, 0.5, Complex::cosh, 0.9895848833999199, 0.24982639750046154); |
| assertComplex(0.5, 1, Complex::cosh, 0.60925890915779424, 0.43848657989259532); |
| assertComplex(0.5, 2, Complex::cosh, -0.46925797822905341, 0.473830620416407); |
| assertComplex(0.5, 1e+308, Complex::cosh, -1.0050631011564148, 0.23626278272774978); |
| assertComplex(1, 0.0, Complex::cosh, 1.5430806348152437, 0.0); |
| assertComplex(1, 0.5, Complex::cosh, 1.3541806567045842, 0.5634214652309818); |
| assertComplex(1, 1, Complex::cosh, 0.83373002513114913, 0.98889770576286506); |
| assertComplex(1, 2, Complex::cosh, -0.64214812471551996, 1.0686074213827783); |
| assertComplex(1, 1e+308, Complex::cosh, -1.375361561382608, 0.5328320968314485); |
| assertComplex(2, 0.0, Complex::cosh, 3.7621956910836314, 0.0); |
| assertComplex(2, 0.5, Complex::cosh, 3.3016373329140944, 1.7388095044743164); |
| assertComplex(2, 1, Complex::cosh, 2.0327230070196656, 3.0518977991517997); |
| assertComplex(2, 2, Complex::cosh, -1.5656258353157435, 3.2978948363112366); |
| assertComplex(2, 1e+308, Complex::cosh, -3.3532786447904863, 1.6444057804572179); |
| assertComplex(1e+308, 0.0, Complex::cosh, inf, nan); |
| assertComplex(1e+308, 0.5, Complex::cosh, inf, inf); |
| assertComplex(1e+308, 1, Complex::cosh, inf, inf); |
| assertComplex(1e+308, 2, Complex::cosh, -inf, inf); |
| assertComplex(1e+308, 1e+308, Complex::cosh, -inf, inf); |
| } |
| |
| @Test |
| public void testSinh() { |
| assertComplex(-1e+308, 0.0, Complex::sinh, -inf, nan); |
| assertComplex(-1e+308, 0.5, Complex::sinh, -inf, inf); |
| assertComplex(-1e+308, 1, Complex::sinh, -inf, inf); |
| assertComplex(-1e+308, 2, Complex::sinh, inf, inf); |
| assertComplex(-1e+308, 1e+308, Complex::sinh, inf, inf); |
| assertComplex(-2, 0.0, Complex::sinh, -3.6268604078470186, 0.0); |
| assertComplex(-2, 0.5, Complex::sinh, -3.1828694483371489, 1.8036926955321817); |
| assertComplex(-2, 1, Complex::sinh, -1.9596010414216061, 3.1657785132161682); |
| assertComplex(-2, 2, Complex::sinh, 1.5093064853236156, 3.4209548611170133); |
| assertComplex(-2, 1e+308, Complex::sinh, 3.2326530972572871, 1.7057663229177449); |
| assertComplex(-1, 0.0, Complex::sinh, -1.1752011936438014, 0.0); |
| assertComplex(-1, 0.5, Complex::sinh, -1.0313360742545512, 0.73979226445601376); |
| assertComplex(-1, 1, Complex::sinh, -0.63496391478473613, 1.2984575814159773); |
| assertComplex(-1, 2, Complex::sinh, 0.48905625904129368, 1.4031192506220405); |
| assertComplex(-1, 1e+308, Complex::sinh, 1.0474673274751902, 0.69962734438628826); |
| assertComplex(-0.5, 0.0, Complex::sinh, -0.52109530549374738, 0.0); |
| assertComplex(-0.5, 0.5, Complex::sinh, -0.45730415318424927, 0.54061268571315335); |
| assertComplex(-0.5, 1, Complex::sinh, -0.28154899513533443, 0.94886453143716798); |
| assertComplex(-0.5, 2, Complex::sinh, 0.21685216292078974, 1.0253473885839877); |
| assertComplex(-0.5, 1e+308, Complex::sinh, 0.46445690317333216, 0.51126165522310774); |
| assertComplex(-0.0, 0.0, Complex::sinh, -0.0, 0.0); |
| assertComplex(-0.0, 0.5, Complex::sinh, -0.0, 0.47942553860420301); |
| assertComplex(-0.0, 1, Complex::sinh, -0.0, 0.8414709848078965); |
| assertComplex(-0.0, 2, Complex::sinh, 0.0, 0.90929742682568171); |
| assertComplex(-0.0, 1e+308, Complex::sinh, 0.0, 0.4533964905016491); |
| assertComplex(0.0, 0.0, Complex::sinh, 0.0, 0.0); |
| assertComplex(0.0, 0.5, Complex::sinh, 0.0, 0.47942553860420301); |
| assertComplex(0.0, 1, Complex::sinh, 0.0, 0.8414709848078965); |
| assertComplex(0.0, 2, Complex::sinh, -0.0, 0.90929742682568171); |
| assertComplex(0.0, 1e+308, Complex::sinh, -0.0, 0.4533964905016491); |
| assertComplex(0.5, 0.0, Complex::sinh, 0.52109530549374738, 0.0); |
| assertComplex(0.5, 0.5, Complex::sinh, 0.45730415318424927, 0.54061268571315335); |
| assertComplex(0.5, 1, Complex::sinh, 0.28154899513533443, 0.94886453143716798); |
| assertComplex(0.5, 2, Complex::sinh, -0.21685216292078974, 1.0253473885839877); |
| assertComplex(0.5, 1e+308, Complex::sinh, -0.46445690317333216, 0.51126165522310774); |
| assertComplex(1, 0.0, Complex::sinh, 1.1752011936438014, 0.0); |
| assertComplex(1, 0.5, Complex::sinh, 1.0313360742545512, 0.73979226445601376); |
| assertComplex(1, 1, Complex::sinh, 0.63496391478473613, 1.2984575814159773); |
| assertComplex(1, 2, Complex::sinh, -0.48905625904129368, 1.4031192506220405); |
| assertComplex(1, 1e+308, Complex::sinh, -1.0474673274751902, 0.69962734438628826); |
| assertComplex(2, 0.0, Complex::sinh, 3.6268604078470186, 0.0); |
| assertComplex(2, 0.5, Complex::sinh, 3.1828694483371489, 1.8036926955321817); |
| assertComplex(2, 1, Complex::sinh, 1.9596010414216061, 3.1657785132161682); |
| assertComplex(2, 2, Complex::sinh, -1.5093064853236156, 3.4209548611170133); |
| assertComplex(2, 1e+308, Complex::sinh, -3.2326530972572871, 1.7057663229177449); |
| assertComplex(1e+308, 0.0, Complex::sinh, inf, nan); |
| assertComplex(1e+308, 0.5, Complex::sinh, inf, inf); |
| assertComplex(1e+308, 1, Complex::sinh, inf, inf); |
| assertComplex(1e+308, 2, Complex::sinh, -inf, inf); |
| assertComplex(1e+308, 1e+308, Complex::sinh, -inf, inf); |
| } |
| |
| @Test |
| public void testTanh() { |
| // assertComplex(-1e+308, 0.0, Complex::tanh, -1, -0.0); |
| // assertComplex(-1e+308, 0.5, Complex::tanh, -1, 0.0); |
| // assertComplex(-1e+308, 1, Complex::tanh, -1, 0.0); |
| // assertComplex(-1e+308, 2, Complex::tanh, -1, 0.0); |
| // assertComplex(-1e+308, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(-2, 0.0, Complex::tanh, -0.9640275800758169, 0.0); |
| assertComplex(-2, 0.5, Complex::tanh, -0.97994084996173814, 0.030215987322877575); |
| assertComplex(-2, 1, Complex::tanh, -1.0147936161466335, 0.033812826079896691); |
| assertComplex(-2, 2, Complex::tanh, -1.0238355945704727, -0.028392952868232287); |
| assertComplex(-2, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(-1, 0.0, Complex::tanh, -0.76159415595576485, 0.0); |
| assertComplex(-1, 0.5, Complex::tanh, -0.84296620484578311, 0.19557731006593398); |
| assertComplex(-1, 1, Complex::tanh, -1.0839233273386946, 0.27175258531951174); |
| assertComplex(-1, 2, Complex::tanh, -1.1667362572409199, -0.24345820118572523); |
| assertComplex(-1, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(-0.5, 0.0, Complex::tanh, -0.46211715726000974, 0.0); |
| assertComplex(-0.5, 0.5, Complex::tanh, -0.56408314126749848, 0.40389645531602575, 2); |
| assertComplex(-0.5, 1, Complex::tanh, -1.042830728344361, 0.80687741216308495); |
| assertComplex(-0.5, 2, Complex::tanh, -1.3212865837711918, -0.85087812114493777, 2); |
| assertComplex(-0.5, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(-0.0, 0.0, Complex::tanh, -0.0, 0.0); |
| assertComplex(-0.0, 0.5, Complex::tanh, -0.0, 0.54630248984379048); |
| assertComplex(-0.0, 1, Complex::tanh, -0.0, 1.5574077246549021); |
| assertComplex(-0.0, 2, Complex::tanh, -0.0, -2.1850398632615189); |
| assertComplex(-0.0, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(0.0, 0.0, Complex::tanh, 0.0, 0.0); |
| assertComplex(0.0, 0.5, Complex::tanh, 0.0, 0.54630248984379048); |
| assertComplex(0.0, 1, Complex::tanh, 0.0, 1.5574077246549021); |
| assertComplex(0.0, 2, Complex::tanh, 0.0, -2.1850398632615189); |
| assertComplex(0.0, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(0.5, 0.0, Complex::tanh, 0.46211715726000974, 0.0); |
| assertComplex(0.5, 0.5, Complex::tanh, 0.56408314126749848, 0.40389645531602575, 2); |
| assertComplex(0.5, 1, Complex::tanh, 1.042830728344361, 0.80687741216308495); |
| assertComplex(0.5, 2, Complex::tanh, 1.3212865837711918, -0.85087812114493777, 2); |
| assertComplex(0.5, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(1, 0.0, Complex::tanh, 0.76159415595576485, 0.0); |
| assertComplex(1, 0.5, Complex::tanh, 0.84296620484578311, 0.19557731006593398); |
| assertComplex(1, 1, Complex::tanh, 1.0839233273386946, 0.27175258531951174); |
| assertComplex(1, 2, Complex::tanh, 1.1667362572409199, -0.24345820118572523); |
| assertComplex(1, 1e+308, Complex::tanh, nan, nan); |
| assertComplex(2, 0.0, Complex::tanh, 0.9640275800758169, 0.0); |
| assertComplex(2, 0.5, Complex::tanh, 0.97994084996173814, 0.030215987322877575); |
| assertComplex(2, 1, Complex::tanh, 1.0147936161466335, 0.033812826079896691); |
| assertComplex(2, 2, Complex::tanh, 1.0238355945704727, -0.028392952868232287); |
| assertComplex(2, 1e+308, Complex::tanh, nan, nan); |
| // assertComplex(1e+308, 0.0, Complex::tanh, 1, -0.0); |
| // assertComplex(1e+308, 0.5, Complex::tanh, 1, 0.0); |
| // assertComplex(1e+308, 1, Complex::tanh, 1, 0.0); |
| // assertComplex(1e+308, 2, Complex::tanh, 1, 0.0); |
| assertComplex(1e+308, 1e+308, Complex::tanh, nan, nan); |
| } |
| |
| @Test |
| public void testExp() { |
| assertComplex(-1e+308, 0.0, Complex::exp, 0.0, 0.0); |
| assertComplex(-1e+308, 0.5, Complex::exp, 0.0, 0.0); |
| assertComplex(-1e+308, 1, Complex::exp, 0.0, 0.0); |
| assertComplex(-1e+308, 2, Complex::exp, -0.0, 0.0); |
| assertComplex(-1e+308, 1e+308, Complex::exp, -0.0, 0.0); |
| assertComplex(-2, 0.0, Complex::exp, 0.1353352832366127, 0.0); |
| assertComplex(-2, 0.5, Complex::exp, 0.11876788457694579, 0.064883191057865414); |
| assertComplex(-2, 1, Complex::exp, 0.073121965598059641, 0.1138807140643681); |
| assertComplex(-2, 2, Complex::exp, -0.056319349992127891, 0.12306002480577674); |
| assertComplex(-2, 1e+308, Complex::exp, -0.12062554753319905, 0.061360542460526864); |
| assertComplex(-1, 0.0, Complex::exp, 0.36787944117144233, 0.0); |
| assertComplex(-1, 0.5, Complex::exp, 0.32284458245003306, 0.17637079922503196); |
| assertComplex(-1, 1, Complex::exp, 0.19876611034641298, 0.30955987565311222); |
| assertComplex(-1, 2, Complex::exp, -0.15309186567422631, 0.33451182923926226); |
| assertComplex(-1, 1e+308, Complex::exp, -0.32789423390741779, 0.16679524755483982); |
| assertComplex(-0.5, 0.0, Complex::exp, 0.60653065971263342, 0.0); |
| assertComplex(-0.5, 0.5, Complex::exp, 0.53228073021567079, 0.29078628821269187); |
| assertComplex(-0.5, 1, Complex::exp, 0.32770991402245986, 0.51037795154457277); |
| assertComplex(-0.5, 2, Complex::exp, -0.25240581530826373, 0.55151676816758077); |
| assertComplex(-0.5, 1e+308, Complex::exp, -0.54060619798308285, 0.27499887249535798); |
| assertComplex(-0.0, 0.0, Complex::exp, 1, 0.0); |
| assertComplex(-0.0, 0.5, Complex::exp, 0.87758256189037276, 0.47942553860420301); |
| assertComplex(-0.0, 1, Complex::exp, 0.54030230586813977, 0.8414709848078965); |
| assertComplex(-0.0, 2, Complex::exp, -0.41614683654714241, 0.90929742682568171); |
| assertComplex(-0.0, 1e+308, Complex::exp, -0.89130893768703345, 0.4533964905016491); |
| assertComplex(0.0, 0.0, Complex::exp, 1, 0.0); |
| assertComplex(0.0, 0.5, Complex::exp, 0.87758256189037276, 0.47942553860420301); |
| assertComplex(0.0, 1, Complex::exp, 0.54030230586813977, 0.8414709848078965); |
| assertComplex(0.0, 2, Complex::exp, -0.41614683654714241, 0.90929742682568171); |
| assertComplex(0.0, 1e+308, Complex::exp, -0.89130893768703345, 0.4533964905016491); |
| assertComplex(0.5, 0.0, Complex::exp, 1.6487212707001282, 0.0); |
| assertComplex(0.5, 0.5, Complex::exp, 1.4468890365841693, 0.79043908321361489); |
| assertComplex(0.5, 1, Complex::exp, 0.89080790429312873, 1.3873511113297634); |
| assertComplex(0.5, 2, Complex::exp, -0.68611014114984314, 1.4991780090003948); |
| assertComplex(0.5, 1e+308, Complex::exp, -1.4695200043297472, 0.74752443795085755); |
| assertComplex(1, 0.0, Complex::exp, 2.7182818284590451, 0.0); |
| assertComplex(1, 0.5, Complex::exp, 2.3855167309591354, 1.3032137296869954); |
| assertComplex(1, 1, Complex::exp, 1.4686939399158851, 2.2873552871788423); |
| assertComplex(1, 2, Complex::exp, -1.1312043837568135, 2.4717266720048188); |
| assertComplex(1, 1e+308, Complex::exp, -2.4228288888577985, 1.2324594412177368); |
| assertComplex(2, 0.0, Complex::exp, 7.3890560989306504, 0.0); |
| assertComplex(2, 0.5, Complex::exp, 6.4845067812512438, 3.5425022000064983); |
| assertComplex(2, 1, Complex::exp, 3.9923240484412719, 6.2176763123679679); |
| assertComplex(2, 2, Complex::exp, -3.0749323206393591, 6.7188496974282499); |
| assertComplex(2, 1e+308, Complex::exp, -6.5859317420477739, 3.350172103374963); |
| assertComplex(1e+308, 0.0, Complex::exp, inf, 0); |
| assertComplex(1e+308, 0.5, Complex::exp, inf, inf); |
| assertComplex(1e+308, 1, Complex::exp, inf, inf); |
| assertComplex(1e+308, 2, Complex::exp, -inf, inf); |
| assertComplex(1e+308, 1e+308, Complex::exp, -inf, inf); |
| } |
| |
| @Test |
| public void testLog() { |
| assertComplex(-1e+308, 0.0, Complex::log, 709.19620864216608, 3.1415926535897931); |
| assertComplex(-1e+308, 0.5, Complex::log, 709.19620864216608, 3.1415926535897931); |
| assertComplex(-1e+308, 1, Complex::log, 709.19620864216608, 3.1415926535897931); |
| assertComplex(-1e+308, 2, Complex::log, 709.19620864216608, 3.1415926535897931); |
| assertComplex(-1e+308, 1e+308, Complex::log, 709.54278223244603, 2.3561944901923448); |
| assertComplex(-2, 0.0, Complex::log, 0.69314718055994529, 3.1415926535897931); |
| assertComplex(-2, 0.5, Complex::log, 0.72345949146816269, 2.8966139904629289); |
| assertComplex(-2, 1, Complex::log, 0.80471895621705025, 2.677945044588987); |
| assertComplex(-2, 2, Complex::log, 1.0397207708399181, 2.3561944901923448); |
| assertComplex(-2, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(-1, 0.0, Complex::log, 0.0, 3.1415926535897931); |
| assertComplex(-1, 0.5, Complex::log, 0.11157177565710492, 2.677945044588987); |
| assertComplex(-1, 1, Complex::log, 0.3465735902799727, 2.3561944901923448); |
| assertComplex(-1, 2, Complex::log, 0.80471895621705025, 2.0344439357957027); |
| assertComplex(-1, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(-0.5, 0.0, Complex::log, -0.69314718055994529, 3.1415926535897931); |
| assertComplex(-0.5, 0.5, Complex::log, -0.34657359027997259, 2.3561944901923448); |
| assertComplex(-0.5, 1, Complex::log, 0.11157177565710492, 2.0344439357957027); |
| assertComplex(-0.5, 2, Complex::log, 0.72345949146816269, 1.8157749899217608); |
| assertComplex(-0.5, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(-0.0, 0.0, Complex::log, -inf, 3.1415926535897931); |
| assertComplex(-0.0, 0.5, Complex::log, -0.69314718055994529, 1.5707963267948966); |
| assertComplex(-0.0, 1, Complex::log, 0.0, 1.5707963267948966); |
| assertComplex(-0.0, 2, Complex::log, 0.69314718055994529, 1.5707963267948966); |
| assertComplex(-0.0, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(0.0, 0.0, Complex::log, -inf, 0.0); |
| assertComplex(0.0, 0.5, Complex::log, -0.69314718055994529, 1.5707963267948966); |
| assertComplex(0.0, 1, Complex::log, 0.0, 1.5707963267948966); |
| assertComplex(0.0, 2, Complex::log, 0.69314718055994529, 1.5707963267948966); |
| assertComplex(0.0, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(0.5, 0.0, Complex::log, -0.69314718055994529, 0.0); |
| assertComplex(0.5, 0.5, Complex::log, -0.34657359027997259, 0.78539816339744828); |
| assertComplex(0.5, 1, Complex::log, 0.11157177565710492, 1.1071487177940904); |
| assertComplex(0.5, 2, Complex::log, 0.72345949146816269, 1.3258176636680326); |
| assertComplex(0.5, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(1, 0.0, Complex::log, 0.0, 0.0); |
| assertComplex(1, 0.5, Complex::log, 0.11157177565710492, 0.46364760900080609); |
| assertComplex(1, 1, Complex::log, 0.3465735902799727, 0.78539816339744828); |
| assertComplex(1, 2, Complex::log, 0.80471895621705025, 1.1071487177940904); |
| assertComplex(1, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(2, 0.0, Complex::log, 0.69314718055994529, 0.0); |
| assertComplex(2, 0.5, Complex::log, 0.72345949146816269, 0.24497866312686414); |
| assertComplex(2, 1, Complex::log, 0.80471895621705025, 0.46364760900080609); |
| assertComplex(2, 2, Complex::log, 1.0397207708399181, 0.78539816339744828); |
| assertComplex(2, 1e+308, Complex::log, 709.19620864216608, 1.5707963267948966); |
| assertComplex(1e+308, 0.0, Complex::log, 709.19620864216608, 0.0); |
| assertComplex(1e+308, 0.5, Complex::log, 709.19620864216608, 4.9999999999999995e-309); |
| assertComplex(1e+308, 1, Complex::log, 709.19620864216608, 9.9999999999999991e-309); |
| assertComplex(1e+308, 2, Complex::log, 709.19620864216608, 1.9999999999999998e-308); |
| assertComplex(1e+308, 1e+308, Complex::log, 709.54278223244603, 0.78539816339744828); |
| } |
| |
| @Test |
| public void testSqrt() { |
| // --- |
| // The following reference 'real' values have been copied from the (1e308, x) cases. |
| // The C reference program used to compute these values does not compute |
| // mirrored values. |
| assertComplex(-1e+308, 0.0, Complex::sqrt, 0, 1e+154); |
| assertComplex(-1e+308, 0.5, Complex::sqrt, 2.4999999999999974e-155, 1e+154, 6); |
| assertComplex(-1e+308, 1, Complex::sqrt, 4.9999999999999999e-155, 1e+154); |
| assertComplex(-1e+308, 2, Complex::sqrt, 9.9999999999999997e-155, 1e+154); |
| assertComplex(-1e+308, 1e+308, Complex::sqrt, 4.5508986056222742e+153, 1.09868411346781e+154); |
| // --- |
| assertComplex(-2, 0.0, Complex::sqrt, 0, 1.4142135623730951); |
| assertComplex(-2, 0.5, Complex::sqrt, 0.17543205637629397, 1.425053124063947, 5); |
| assertComplex(-2, 1, Complex::sqrt, 0.3435607497225126, 1.4553466902253549, 3); |
| assertComplex(-2, 2, Complex::sqrt, 0.64359425290558281, 1.5537739740300374, 2); |
| assertComplex(-2, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(-1, 0.0, Complex::sqrt, 0, 1); |
| assertComplex(-1, 0.5, Complex::sqrt, 0.24293413587832291, 1.0290855136357462, 3); |
| assertComplex(-1, 1, Complex::sqrt, 0.45508986056222739, 1.0986841134678098); |
| assertComplex(-1, 2, Complex::sqrt, 0.78615137775742339, 1.2720196495140688); |
| assertComplex(-1, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(-0.5, 0.0, Complex::sqrt, 0, 0.70710678118654757); |
| assertComplex(-0.5, 0.5, Complex::sqrt, 0.3217971264527914, 0.77688698701501868, 2); |
| assertComplex(-0.5, 1, Complex::sqrt, 0.55589297025142126, 0.89945371997393353); |
| assertComplex(-0.5, 2, Complex::sqrt, 0.88361553087551337, 1.1317139242778693); |
| assertComplex(-0.5, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(-0.0, 0.0, Complex::sqrt, 0.0, 0.0); |
| assertComplex(-0.0, 0.5, Complex::sqrt, 0.50000000000000011, 0.5); |
| assertComplex(-0.0, 1, Complex::sqrt, 0.70710678118654757, 0.70710678118654746); |
| assertComplex(-0.0, 2, Complex::sqrt, 1.0000000000000002, 1); |
| assertComplex(-0.0, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(0.0, 0.0, Complex::sqrt, 0.0, 0.0); |
| assertComplex(0.0, 0.5, Complex::sqrt, 0.50000000000000011, 0.5); |
| assertComplex(0.0, 1, Complex::sqrt, 0.70710678118654757, 0.70710678118654746); |
| assertComplex(0.0, 2, Complex::sqrt, 1.0000000000000002, 1); |
| assertComplex(0.0, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(0.5, 0.0, Complex::sqrt, 0.70710678118654757, 0.0); |
| assertComplex(0.5, 0.5, Complex::sqrt, 0.77688698701501868, 0.32179712645279135); |
| assertComplex(0.5, 1, Complex::sqrt, 0.89945371997393364, 0.55589297025142115); |
| assertComplex(0.5, 2, Complex::sqrt, 1.1317139242778693, 0.88361553087551337); |
| assertComplex(0.5, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(1, 0.0, Complex::sqrt, 1, 0.0); |
| assertComplex(1, 0.5, Complex::sqrt, 1.0290855136357462, 0.24293413587832283); |
| assertComplex(1, 1, Complex::sqrt, 1.0986841134678098, 0.45508986056222733); |
| assertComplex(1, 2, Complex::sqrt, 1.272019649514069, 0.78615137775742328); |
| assertComplex(1, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(2, 0.0, Complex::sqrt, 1.4142135623730951, 0.0); |
| assertComplex(2, 0.5, Complex::sqrt, 1.425053124063947, 0.17543205637629383); |
| assertComplex(2, 1, Complex::sqrt, 1.4553466902253549, 0.34356074972251244); |
| assertComplex(2, 2, Complex::sqrt, 1.5537739740300374, 0.6435942529055827); |
| assertComplex(2, 1e+308, Complex::sqrt, 7.0710678118654767e+153, 7.0710678118654752e+153); |
| assertComplex(1e+308, 0.0, Complex::sqrt, 1e+154, 0.0); |
| assertComplex(1e+308, 0.5, Complex::sqrt, 1e+154, 2.4999999999999974e-155, 6); |
| assertComplex(1e+308, 1, Complex::sqrt, 1e+154, 4.9999999999999999e-155); |
| assertComplex(1e+308, 2, Complex::sqrt, 1e+154, 9.9999999999999997e-155); |
| assertComplex(1e+308, 1e+308, Complex::sqrt, 1.09868411346781e+154, 4.5508986056222734e+153); |
| } |
| |
| @Test |
| public void testMultiply() { |
| assertComplex(2, 3, 5, 4, Complex::multiply, -2, 23); |
| assertComplex(5, 4, 2, 3, Complex::multiply, -2, 23); |
| assertComplex(2, 3, -5, 4, Complex::multiply, -22, -7); |
| assertComplex(-5, 4, 2, 3, Complex::multiply, -22, -7); |
| assertComplex(2, 3, 5, -4, Complex::multiply, 22, 7); |
| assertComplex(5, -4, 2, 3, Complex::multiply, 22, 7); |
| assertComplex(2, 3, -5, -4, Complex::multiply, 2, -23); |
| assertComplex(-5, -4, 2, 3, Complex::multiply, 2, -23); |
| } |
| |
| @Test |
| public void testDivide() { |
| assertComplex(2, 3, 5, 4, Complex::divide, 0.53658536585365857, 0.17073170731707318); |
| assertComplex(5, 4, 2, 3, Complex::divide, 1.6923076923076923, -0.53846153846153844); |
| assertComplex(2, 3, -5, 4, Complex::divide, 0.04878048780487805, -0.56097560975609762); |
| assertComplex(-5, 4, 2, 3, Complex::divide, 0.15384615384615385, 1.7692307692307692); |
| assertComplex(2, 3, 5, -4, Complex::divide, -0.04878048780487805, 0.56097560975609762); |
| assertComplex(5, -4, 2, 3, Complex::divide, -0.15384615384615385, -1.7692307692307692); |
| assertComplex(2, 3, -5, -4, Complex::divide, -0.53658536585365857, -0.17073170731707318); |
| assertComplex(-5, -4, 2, 3, Complex::divide, -1.6923076923076923, 0.53846153846153844); |
| } |
| |
| @Test |
| public void testPowComplex() { |
| assertComplex(2, 3, 5, 4, Complex::pow, -9.7367145095888414, -6.9377513609299886, 2); |
| assertComplex(5, 4, 2, 3, Complex::pow, 4.354910316631539, 3.2198331430252156, 8); |
| assertComplex(2, 3, -5, 4, Complex::pow, 3.1452105198427317e-05, 6.8990150088148226e-06); |
| assertComplex(-5, 4, 2, 3, Complex::pow, -0.011821399482548253, -0.022082334539521097); |
| assertComplex(2, 3, 5, -4, Complex::pow, 30334.832969842264, -6653.9414970320349); |
| assertComplex(5, -4, 2, 3, Complex::pow, -146.48661898442663, -273.63651239033993, 9); |
| assertComplex(2, 3, -5, -4, Complex::pow, -0.068119398044204305, 0.048537465694561743, 2); |
| assertComplex(-5, -4, 2, 3, Complex::pow, 53964.514878760994, 39899.038308625939); |
| } |
| } |