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