| ! { dg-options "-cpp -std=gnu" } |
| ! { dg-do run } |
| ! |
| ! Test extra math intrinsics formerly offered by -fdec-math, |
| ! now included with -std=gnu or -std=legacy. |
| ! |
| |
| module dec_math |
| |
| implicit none |
| |
| real(4), parameter :: pi_f = 3.14159274_4 |
| real(8), parameter :: pi_d = 3.1415926535897931_8 |
| #ifdef __GFC_REAL_10__ |
| real(10), parameter :: pi_l = 3.1415926535897932383_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| real(16), parameter :: pi_q = 3.1415926535897932384626433832795028_16 |
| #endif |
| |
| real(4), parameter :: r2d_f = 180.0_4 / pi_f |
| real(8), parameter :: r2d_d = 180.0_8 / pi_d |
| #ifdef __GFC_REAL_10__ |
| real(10), parameter :: r2d_l = 180.0_10 / pi_l |
| #endif |
| #ifdef __GFC_REAL_16__ |
| real(16), parameter :: r2d_q = 180.0_16 / pi_q |
| #endif |
| |
| contains |
| |
| function d2rf(x) |
| implicit none |
| real(4), intent(in) :: x |
| real(4) :: d2rf |
| d2rf = (x * pi_f) / 180.0_4 |
| endfunction |
| |
| subroutine cmpf(x, f1, f2, tolerance, str) |
| implicit none |
| real(4), intent(in) :: x, f1, f2, tolerance |
| character(len=*), intent(in) :: str |
| if ( abs(f2 - f1) .gt. tolerance ) then |
| write (*, '(A,A,F12.6,A,F12.6,F12.6)') str, "(", x, ")", f1, f2 |
| STOP 1 |
| endif |
| endsubroutine |
| |
| function d2rd(x) |
| implicit none |
| real(8), intent(in) :: x |
| real(8) :: d2rd |
| d2rd = (x * pi_d) / 180.0_8 |
| endfunction |
| |
| subroutine cmpd(x, d1, d2, tolerance, str) |
| implicit none |
| real(8), intent(in) :: x, d1, d2, tolerance |
| character(len=*), intent(in) :: str |
| if ( dabs(d2 - d1) .gt. tolerance ) then |
| write (*, '(A,A,F18.14,A,F18.14,F18.14)') str, "(", x, ")", d1, d2 |
| STOP 2 |
| endif |
| endsubroutine |
| |
| #ifdef __GFC_REAL_10__ |
| function d2rl(x) |
| implicit none |
| real(10), intent(in) :: x |
| real(10) :: d2rl |
| d2rl = (x * pi_l) / 180.0_10 |
| endfunction |
| |
| subroutine cmpl(x, f1, f2, tolerance, str) |
| implicit none |
| real(10), intent(in) :: x, f1, f2, tolerance |
| character(len=*), intent(in) :: str |
| if ( abs(f2 - f1) .gt. tolerance ) then |
| write (*, '(A,A,F21.17,A,F21.17,F21.17)') str, "(", x, ")", f1, f2 |
| STOP 1 |
| endif |
| endsubroutine |
| #endif |
| |
| #ifdef __GFC_REAL_16__ |
| function d2rq(x) |
| implicit none |
| real(16), intent(in) :: x |
| real(16) :: d2rq |
| d2rq = (x * pi_q) / 180.0_16 |
| endfunction |
| |
| subroutine cmpq(x, f1, f2, tolerance, str) |
| implicit none |
| real(16), intent(in) :: x, f1, f2, tolerance |
| character(len=*), intent(in) :: str |
| if ( abs(f2 - f1) .gt. tolerance ) then |
| write (*, '(A,A,F34.30,A,F34.30,F34.30)') str, "(", x, ")", f1, f2 |
| STOP 1 |
| endif |
| endsubroutine |
| #endif |
| |
| end module |
| |
| use dec_math |
| |
| implicit none |
| |
| ! inputs |
| real(4) :: f_i1, f_i2 |
| real(4), volatile :: xf |
| real(8) :: d_i1, d_i2 |
| real(8), volatile :: xd |
| #ifdef __GFC_REAL_10__ |
| real(10) :: l_i1, l_i2 |
| real(10), volatile :: xl |
| #endif |
| #ifdef __GFC_REAL_16__ |
| real(16) :: q_i1, q_i2 |
| real(16), volatile :: xq |
| #endif |
| |
| ! expected outputs from (oe) default (oxe) expression |
| real(4) :: f_oe, f_oxe |
| real(8) :: d_oe, d_oxe |
| #ifdef __GFC_REAL_10__ |
| real(10) :: l_oe, l_oxe |
| #endif |
| #ifdef __GFC_REAL_16__ |
| real(16) :: q_oe, q_oxe |
| #endif |
| |
| ! actual outputs from (oa) default (oc) constant (ox) expression |
| real(4) :: f_oa, f_oc, f_ox |
| real(8) :: d_oa, d_oc, d_ox |
| #ifdef __GFC_REAL_10__ |
| real(10) :: l_oa, l_oc, l_ox |
| #endif |
| #ifdef __GFC_REAL_16__ |
| real(16) :: q_oa, q_oc, q_ox |
| #endif |
| |
| ! tolerance of the answer: assert |exp-act| <= tol |
| ! accept loss of ~four decimal places |
| real(4), parameter :: f_tol = 5e-3_4 |
| real(8), parameter :: d_tol = 5e-10_8 |
| #ifdef __GFC_REAL_10__ |
| real(10), parameter :: l_tol = 5e-15_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| real(16), parameter :: q_tol = 5e-20_16 |
| #endif |
| |
| ! volatile multiplication factors to test non-constant expressions |
| xf = 2.0_4 |
| xd = 2.0_8 |
| #ifdef __GFC_REAL_10__ |
| xl = 2.0_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| xq = 2.0_16 |
| #endif |
| |
| ! Input -- cos(pi/4) |
| f_i1 = 0.707107_4 |
| d_i1 = 0.707106781186548_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 0.707106781186547573_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 0.707106781186547572737310929369414_16 |
| #endif |
| |
| ! Expected -- pi/4 |
| f_oe = r2d_f * acos (f_i1) |
| f_oxe = r2d_f * acos (xf * f_i1) |
| d_oe = r2d_d * acos (d_i1) |
| d_oxe = r2d_d * acos (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oe = r2d_l * acos (l_i1) |
| l_oxe = r2d_l * acos (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = r2d_q * acos (q_i1) |
| q_oxe = r2d_q * acos (xq * q_i1) |
| #endif |
| |
| ! Actual |
| f_oa = acosd (f_i1) |
| f_oc = acosd (0.707107_4) |
| f_ox = acosd (xf * f_i1) |
| d_oa = acosd (d_i1) |
| d_oc = acosd (0.707106781186548_8) |
| d_ox = acosd (xd * 0.707106781186548_8) |
| #ifdef __GFC_REAL_10__ |
| l_oa = acosd (l_i1) |
| l_oc = acosd (0.707106781186547573_10) |
| l_ox = acosd (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = acosd (q_i1) |
| q_oc = acosd (0.707106781186547572737310929369414_16) |
| q_ox = acosd (xq * 0.707106781186547572737310929369414_16) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) facosd") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) facosd") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) facosd") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) dacosd") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) dacosd") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) dacosd") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) lacosd") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) lacosd") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) lacosd") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qacosd") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qacosd") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qacosd") |
| #endif |
| |
| ! Input |
| f_i1 = 60.0_4 |
| d_i1 = 60.0_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 60.0_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 60.0_16 |
| #endif |
| |
| ! Expected |
| f_oe = cos (d2rf(f_i1)) |
| f_oxe = cos (d2rf(xf * f_i1)) |
| d_oe = cos (d2rd(d_i1)) |
| d_oxe = cos (d2rd(xd * d_i1)) |
| #ifdef __GFC_REAL_10__ |
| l_oe = cos (d2rl(l_i1)) |
| l_oxe = cos (d2rl(xl * l_i1)) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = cos (d2rq(q_i1)) |
| q_oxe = cos (d2rq(xq * q_i1)) |
| #endif |
| |
| ! Actual |
| f_oa = cosd (f_i1) |
| f_oc = cosd (60.0_4) |
| f_ox = cosd (xf * f_i1) |
| d_oa = cosd (d_i1) |
| d_oc = cosd (60.0_8) |
| d_ox = cosd (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oa = cosd (l_i1) |
| l_oc = cosd (60.0_10) |
| l_ox = cosd (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = cosd (q_i1) |
| q_oc = cosd (60.0_16) |
| q_ox = cosd (xq * q_i1) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fcosd") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fcosd") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fcosd") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) dcosd") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) dcosd") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) cosd") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) lcosd") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) lcosd") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) lcosd") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qcosd") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qcosd") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qcosd") |
| #endif |
| |
| ! Input -- sin(pi/4) |
| f_i1 = 0.707107_4 |
| d_i1 = 0.707106781186548_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 0.707106781186547573_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 0.707106781186547572737310929369414_16 |
| #endif |
| |
| ! Expected -- pi/4 |
| f_oe = r2d_f * asin (f_i1) |
| f_oxe = r2d_f * asin (xf * f_i1) |
| d_oe = r2d_d * asin (d_i1) |
| d_oxe = r2d_d * asin (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oe = r2d_l * asin (l_i1) |
| l_oxe = r2d_l * asin (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = r2d_q * asin (q_i1) |
| q_oxe = r2d_q * asin (xq * q_i1) |
| #endif |
| |
| ! Actual |
| f_oa = asind (f_i1) |
| f_oc = asind (0.707107_4) |
| f_ox = asind (xf * f_i1) |
| d_oa = asind (d_i1) |
| d_oc = asind (0.707106781186548_8) |
| d_ox = asind (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oa = asind (l_i1) |
| l_oc = asind (0.707106781186547573_10) |
| l_ox = asind (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = asind (q_i1) |
| q_oc = asind (0.707106781186547572737310929369414_16) |
| q_ox = asind (xq * q_i1) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fasind") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fasind") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fasind") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) dasind") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) dasind") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) asind") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) lasind") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) lasind") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) lasind") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qasind") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qasind") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qasind") |
| #endif |
| |
| ! Input |
| f_i1 = 60.0_4 |
| d_i1 = 60.0_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 60.0_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 60.0_16 |
| #endif |
| |
| ! Expected |
| f_oe = sin (d2rf(f_i1)) |
| f_oxe = sin (d2rf(xf * f_i1)) |
| d_oe = sin (d2rd(d_i1)) |
| d_oxe = sin (d2rd(xd * d_i1)) |
| #ifdef __GFC_REAL_10__ |
| l_oe = sin (d2rl(l_i1)) |
| l_oxe = sin (d2rl(xl * l_i1)) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = sin (d2rq(q_i1)) |
| q_oxe = sin (d2rq(xq * q_i1)) |
| #endif |
| |
| ! Actual |
| f_oa = sind (f_i1) |
| f_oc = sind (60.0_4) |
| f_ox = sind (xf * f_i1) |
| d_oa = sind (d_i1) |
| d_oc = sind (60.0_8) |
| d_ox = sind (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oa = sind (l_i1) |
| l_oc = sind (60.0_10) |
| l_ox = sind (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = sind (q_i1) |
| q_oc = sind (60.0_16) |
| q_ox = sind (xq * q_i1) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fsind") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fsind") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fsind") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) dsind") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) dsind") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) sind") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) lsind") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) lsind") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) lsind") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qsind") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qsind") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qsind") |
| #endif |
| |
| ! Input |
| f_i1 = 1.0_4 |
| f_i2 = 2.0_4 |
| d_i1 = 1.0_8 |
| d_i2 = 2.0_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 1.0_10 |
| l_i2 = 2.0_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 1.0_16 |
| q_i2 = 2.0_16 |
| #endif |
| |
| ! Expected |
| f_oe = r2d_f * atan2 (f_i1, f_i2) |
| f_oxe = r2d_f * atan2 (xf * f_i1, f_i2) |
| d_oe = r2d_d * atan2 (d_i1, d_i2) |
| d_oxe = r2d_d * atan2 (xd * d_i1, d_i2) |
| #ifdef __GFC_REAL_10__ |
| l_oe = r2d_l * atan2 (l_i1, l_i2) |
| l_oxe = r2d_l * atan2 (xl * l_i1, l_i2) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = r2d_q * atan2 (q_i1, q_i2) |
| q_oxe = r2d_q * atan2 (xq * q_i1, q_i2) |
| #endif |
| |
| ! Actual |
| f_oa = atan2d (f_i1, f_i2) |
| f_oc = atan2d (1.0_4, 2.0_4) |
| f_ox = atan2d (xf * f_i1, f_i2) |
| d_oa = atan2d (d_i1, d_i2) |
| d_oc = atan2d (1.0_8, 2.0_8) |
| d_ox = atan2d (xd * d_i1, d_i2) |
| #ifdef __GFC_REAL_10__ |
| l_oa = atan2d (l_i1, l_i2) |
| l_oc = atan2d (1.0_10, 2.0_10) |
| l_ox = atan2d (xl * l_i1, l_i2) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = atan2d (q_i1, q_i2) |
| q_oc = atan2d (1.0_16, 2.0_16) |
| q_ox = atan2d (xq * q_i1, q_i2) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fatan2d") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fatan2d") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fatan2d") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) datan2d") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) datan2d") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) atan2d") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) latan2d") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) latan2d") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) latan2d") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qatan2d") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qatan2d") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qatan2d") |
| #endif |
| |
| ! Input |
| f_i1 = 1.55741_4 |
| d_i1 = 1.5574077246549_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 1.55740772465490229_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 1.55740772465490229237161656783428_16 |
| #endif |
| |
| ! Expected |
| f_oe = r2d_f * atan (f_i1) |
| f_oxe = r2d_f * atan (xf * f_i1) |
| d_oe = r2d_d * atan (d_i1) |
| d_oxe = r2d_d * atan (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oe = r2d_l * atan (l_i1) |
| l_oxe = r2d_l * atan (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = r2d_q * atan (q_i1) |
| q_oxe = r2d_q * atan (xq * q_i1) |
| #endif |
| |
| ! Actual |
| f_oa = atand (f_i1) |
| f_oc = atand (1.55741_4) |
| f_ox = atand (xf * f_i1) |
| d_oa = atand (d_i1) |
| d_oc = atand (1.5574077246549_8) |
| d_ox = atand (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oa = atand (l_i1) |
| l_oc = atand (1.55740772465490229_10) |
| l_ox = atand (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = atand (q_i1) |
| q_oc = atand (1.55740772465490229237161656783428_16) |
| q_ox = atand (xq * q_i1) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fatand") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fatand") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fatand") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) datand") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) datand") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) atand") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) latand") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) latand") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) latand") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qatand") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qatand") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qatand") |
| #endif |
| |
| ! Input |
| f_i1 = 34.3775_4 |
| d_i1 = 34.3774677078494_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 34.3774677078493909_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 34.3774677078493908766176900826395_16 |
| #endif |
| |
| ! Expected |
| f_oe = 1.0_4/tan (f_i1) |
| f_oxe = 1.0_4/tan (xf * f_i1) |
| d_oe = 1.0_8/tan (d_i1) |
| d_oxe = 1.0_8/tan (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oe = 1.0_10/tan (l_i1) |
| l_oxe = 1.0_10/tan (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = 1.0_16/tan (q_i1) |
| q_oxe = 1.0_16/tan (xq * q_i1) |
| #endif |
| |
| ! Actual |
| f_oa = cotan (f_i1) |
| f_oc = cotan (34.3775_4) |
| f_ox = cotan (xf * f_i1) |
| d_oa = cotan (d_i1) |
| d_oc = cotan (34.3774677078494_8) |
| d_ox = cotan (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oa = cotan (l_i1) |
| l_oc = cotan (34.3774677078493909_10) |
| l_ox = cotan (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = cotan (q_i1) |
| q_oc = cotan (34.3774677078493908766176900826395_16) |
| q_ox = cotan (xq * q_i1) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fcotan") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fcotan") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fcotan") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) dcotan") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) dcotan") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) cotan") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) lcotan") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) lcotan") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) lcotan") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qcotan") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qcotan") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qcotan") |
| #endif |
| |
| ! Input |
| f_i1 = 0.6_4 |
| d_i1 = 0.6_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 0.6_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 0.6_16 |
| #endif |
| |
| ! Expected |
| f_oe = cotan (d2rf(f_i1)) |
| f_oxe = cotan (d2rf(xf * f_i1)) |
| d_oe = cotan (d2rd(d_i1)) |
| d_oxe = cotan (d2rd(xd * d_i1)) |
| #ifdef __GFC_REAL_10__ |
| l_oe = cotan (d2rl(l_i1)) |
| l_oxe = cotan (d2rl(xl * l_i1)) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = cotan (d2rq(q_i1)) |
| q_oxe = cotan (d2rq(xq * q_i1)) |
| #endif |
| |
| ! Actual |
| f_oa = cotand (f_i1) |
| f_oc = cotand (0.6_4) |
| f_ox = cotand (xf * f_i1) |
| d_oa = cotand (d_i1) |
| d_oc = cotand (0.6_8) |
| d_ox = cotand (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oa = cotand (l_i1) |
| l_oc = cotand (0.6_10) |
| l_ox = cotand (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = cotand (q_i1) |
| q_oc = cotand (0.6_16) |
| q_ox = cotand (xq * q_i1) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) fcotand") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) fcotand") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) fcotand") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) dcotand") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) dcotand") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) cotand") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) lcotand") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) lcotand") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) lcotand") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qcotand") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qcotand") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qcotand") |
| #endif |
| |
| ! Input |
| f_i1 = 60.0_4 |
| d_i1 = 60.0_8 |
| #ifdef __GFC_REAL_10__ |
| l_i1 = 60.0_10 |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_i1 = 60.0_16 |
| #endif |
| |
| ! Expected |
| f_oe = tan (d2rf(f_i1)) |
| f_oxe = tan (d2rf(xf * f_i1)) |
| d_oe = tan (d2rd(d_i1)) |
| d_oxe = tan (d2rd(xd * d_i1)) |
| #ifdef __GFC_REAL_10__ |
| l_oe = tan (d2rl(l_i1)) |
| l_oxe = tan (d2rl(xl * l_i1)) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oe = tan (d2rq(q_i1)) |
| q_oxe = tan (d2rq(xq * q_i1)) |
| #endif |
| |
| ! Actual |
| f_oa = tand (f_i1) |
| f_oc = tand (60.0_4) |
| f_ox = tand (xf * f_i1) |
| d_oa = tand (d_i1) |
| d_oc = tand (60.0_8) |
| d_ox = tand (xd * d_i1) |
| #ifdef __GFC_REAL_10__ |
| l_oa = tand (l_i1) |
| l_oc = tand (60.0_10) |
| l_ox = tand (xl * l_i1) |
| #endif |
| #ifdef __GFC_REAL_16__ |
| q_oa = tand (q_i1) |
| q_oc = tand (60.0_16) |
| q_ox = tand (xq * q_i1) |
| #endif |
| |
| call cmpf(f_i1, f_oe, f_oa, f_tol, "( ) ftand") |
| call cmpf(f_i1, f_oe, f_oc, f_tol, "(c) ftand") |
| call cmpf(f_i1, f_oxe, f_ox, f_tol, "(x) ftand") |
| call cmpd(d_i1, d_oe, d_oa, d_tol, "( ) dtand") |
| call cmpd(d_i1, d_oe, d_oc, d_tol, "(c) dtand") |
| call cmpd(d_i1, d_oxe, d_ox, d_tol, "(x) dtand") |
| #ifdef __GFC_REAL_10__ |
| call cmpl(l_i1, l_oe, l_oa, l_tol, "( ) ltand") |
| call cmpl(l_i1, l_oe, l_oc, l_tol, "(c) ltand") |
| call cmpl(l_i1, l_oxe, l_ox, l_tol, "(x) ltand") |
| #endif |
| #ifdef __GFC_REAL_16__ |
| call cmpq(q_i1, q_oe, q_oa, q_tol, "( ) qtand") |
| call cmpq(q_i1, q_oe, q_oc, q_tol, "(c) qtand") |
| call cmpq(q_i1, q_oxe, q_ox, q_tol, "(x) qtand") |
| #endif |
| |
| end |