Issue 145593
Summary [flang] ASIND and ACOSD give incorrect results
Labels flang
Assignees
Reporter tacaswell
    There appears to be a bug with the acosd and asind intrinsics(?).  Although the following program will compile correctly under flang: 

```fortran
 PROGRAM ACOSD_TEST
C     Program to compare ACOSD with ACOS conversion
 IMPLICIT NONE
      INTEGER I
      REAL X, Y1, Y2, STEP
      REAL PI
 PARAMETER (PI = 3.14159265359)
      
C     Step size for 15 evenly spaced values
      STEP = 2.0 / 14.0
      
      DO 10 I = 0, 14
 X = -1.0 + I * STEP
         Y1 = ACOSD(X)
         Y2 = ACOS(X) * 180.0 / PI
         
         WRITE(*,100) X, Y1, Y2
 10   CONTINUE
      
 100  FORMAT('For x = ',F8.4,': ACOSD = ',F8.4,
     &       ', ACOS(rad->deg) = ',F8.4)
      
      END
```

but when run gives incorrect results:

```
For x =  -1.0000: ACOSD =   1.5883, ACOS(rad->deg) = 180.0000
For x =  -0.8571: ACOSD =   1.5858, ACOS(rad->deg) = 148.9973
For x =  -0.7143: ACOSD =   1.5833, ACOS(rad->deg) = 135.5847
For x =  -0.5714: ACOSD =   1.5808, ACOS(rad->deg) = 124.8499
For x =  -0.4286: ACOSD =   1.5783, ACOS(rad->deg) = 115.3769
For x =  -0.2857: ACOSD = 1.5758, ACOS(rad->deg) = 106.6015
For x =  -0.1429: ACOSD =   1.5733, ACOS(rad->deg) =  98.2132
For x =   0.0000: ACOSD =   1.5708, ACOS(rad->deg) =  90.0000
For x =   0.1429: ACOSD =   1.5683, ACOS(rad->deg) = 81.7868
For x =   0.2857: ACOSD =   1.5658, ACOS(rad->deg) =  73.3984
For x =   0.4286: ACOSD =   1.5633, ACOS(rad->deg) =  64.6231
For x =   0.5714: ACOSD =   1.5608, ACOS(rad->deg) =  55.1501
For x =   0.7143: ACOSD = 1.5583, ACOS(rad->deg) =  44.4153
For x =   0.8571: ACOSD =   1.5558, ACOS(rad->deg) =  31.0027
For x =   1.0000: ACOSD =   1.5533, ACOS(rad->deg) =   0.0000
```

A similar with ASIND gives:

```
For x =  -1.0000: ASIND =  -0.0175, ASIN(rad->deg) = -90.0000
For x =  -0.8571: ASIND = -0.0150, ASIN(rad->deg) = -58.9973
For x =  -0.7143: ASIND =  -0.0125, ASIN(rad->deg) = -45.5847
For x =  -0.5714: ASIND =  -0.0100, ASIN(rad->deg) = -34.8499
For x =  -0.4286: ASIND =  -0.0075, ASIN(rad->deg) = -25.3769
For x =  -0.2857: ASIND =  -0.0050, ASIN(rad->deg) = -16.6015
For x =  -0.1429: ASIND =  -0.0025, ASIN(rad->deg) =  -8.2132
For x =   0.0000: ASIND =   0.0000, ASIN(rad->deg) =   0.0000
For x =   0.1429: ASIND = 0.0025, ASIN(rad->deg) =   8.2132
For x =   0.2857: ASIND =   0.0050, ASIN(rad->deg) =  16.6016
For x =   0.4286: ASIND =   0.0075, ASIN(rad->deg) =  25.3769
For x =   0.5714: ASIND =   0.0100, ASIN(rad->deg) = 34.8499
For x =   0.7143: ASIND =   0.0125, ASIN(rad->deg) =  45.5847
For x =   0.8571: ASIND =   0.0150, ASIN(rad->deg) =  58.9973
For x =   1.0000: ASIND =   0.0175, ASIN(rad->deg) =  90.0000
```

f77 and f90 versions of both are in https://github.com/tacaswell/flang-intrinsics-bug

This code gives the correct results with gfortran.

I've tested this with:

```
$ flang --version
flang version 20.1.7 (Fedora 20.1.7-1.fc42)
Target: x86_64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
```

but saw the bug on windows with (I think) flang 19 from conda-forge. I can systematically test if needed.

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to