[Info-vax] gnulib test-fmal-ieee failure help needed.
John E. Malmberg
wb8tyw at qsl.net_work
Sun Jul 23 19:54:15 EDT 2017
On 7/23/2017 6:38 PM, Craig A. Berry wrote:
> On 7/23/17 4:51 PM, John E. Malmberg wrote:
>> On 7/22/2017 11:01 PM, John E. Malmberg wrote:
>>> On 7/22/2017 10:52 PM, John E. Malmberg wrote:
>>>> On 7/22/2017 10:09 PM, Craig A. Berry wrote:
>>>>> On 7/22/17 8:54 PM, John E. Malmberg wrote:
>>>>>> The gnulib test-fmal-ieee is failing for the gnulib provided fmal
>>>>>> routine.
>>>>>>
>>>>>> Actually a lot of the IEEE tests are failing.
>>>>>>
>>>>>> My compiler command line on OpenVMS 8.4 is:
>>>>>>
>>>>>> CC/STANDARD=(RELAXED)/ACCEPT=(NOVAXC,RESTR,C99)-
>>>>>> /LIST/SHOW=(EXPAN,INCLU)/NAMES=(AS_IS,SHORT)-
>>>>>> /MAIN=POSIX_EXIT-
>>>>>> /FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS-
>>>>>> /NESTED=NONE-
>>>>>> /PREFIX=EXCEPT=(STRTOIMAX,STRTOUMAX,ISWBLANK,ISBLANK)-
>>>>>> /WARN=(DISABLE=QUESTCOMPARE)-
>>>>>> /DEBUG/NOOPTIMIZE/DEB=ALL/NOOPT-
>>>>>> /DEF=-(HAVE_CONFIG_H,EXEEXT="",EXEEXT="",NO_XMALLOC,EXEEXT="",-
>>>>>> GNULIB_STRICT_CHECKING=1,_POSIX_EXIT,_USE_STD_STAT,-
>>>>>> _ _USE_STD_IOSTREAM)-
>>>>>> /INC=(./,../)/OBJECT=SYS$DISK:[]fmal.o SYS$DISK:[]fmal.c
>>>>>>
>>>>>> The floating variables involved are declared double.
>>>>>>
>>>>>> The input to the failed call is:
>>>>>>
>>>>>> fmal(Infinity, 2.0L, -Infinity) and the result is expected to be
>>>>>> NaN.
>>>>>>
>>>>>> Is there some other compile settings that I should be using to be
>>>>>> more compatible with GNULIB's expectations for IEEE math?
>>>>>
>>>>> fmal is for long doubles, so passing doubles to it is unlikely to
>>>>> work.
>>>>> For example, you probably want LDBL_INFINITY instead of Infinity.
>>>>> Possibly related is that none of the IEEE test macros (isnan, isinf,
>>>>> etc.) in math.h on VMS works for floats or long doubles -- they only
>>>>> work for doubles. Which is a bug. We have some workarounds in Perl for
>>>>> some of it.
>>>>
>>>> Your right, the gnulib fmal code is long doubles, not doubles.
>>>>
>>>> VMS has a number of the declarations that should be in math.h in fp.h.
>>>>
>>>> In this case INFINITY is defined as decc$gt_gbl_infinity by fp.h and
>>>> is reported as Infinity in the VMS debugger.
>>>
>>> The test-fmal1 fails in the same way as test-fmal-ieee.
>>>
>>> The test-malm2 fails when fma returns what the debugger says is
>>> Infinity and the test was expecting "-Infinity".
>>>
>>> DBG> eval result
>>> Infinity
>>> DBG> eval -result
>>> -Infinity
>>
>> Latest failure:
>>
>> ASSERT (ILOGB (L_(0.0)) == FP_ILOGB0)
>> ILOG_B is ilogb()
>> FP_ILOGB0 is - 2147483647
>> L_(0.0) is 0.0L
>
> So it's passing a long double to a function that expects a double. That
> doesn't seem likely to work. It should be calling ilogbl not ilogb if
> the argument is a long double. See:
>
> <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ilogb.html>
I can not seem to copy things right.
The ILOGB in the last test was
I2 1 42156 ASSERT (ILOGB (L_(0.0)) == FP_ILOGB0);
E do { if ( ! ( ilogbl ( 0.0L ) == ( - 2147483647 ) ) )
{ rpl_fprintf ( ( decc$ga_stderr ) ,
"%s:%d: assertion '%s' failed\n" ,
"GNULIB_ROOT:[gnulib.gltests]test-ilogb.h;1" ,
60 , "ILOGB (L_(0.0)) ==
FP_ILOGB0" ) ; rpl_fflush ( ( decc$ga_stderr )
) ; abort ( ) ; } } while ( 0 )
The gnulib code should be correct with regards to doubles, long doubles,
etc as the code works on many other platforms. If I post a mis-match
between doubles and long doubles etc, it is likely a transcription
error. I realize that makes it harder to diagnose what is going wrong.
So the problem is likely one of:
1. Wrong CC command qualifiers.
2. Bug in math.h/fp.h
3. Bug in VMS CRTL
4. Bug in VMS C compiler.
>>> These results are showing up while am running the failed tests in
>>> debug to get more information. So as soon as I exit one failed test,
>>> the script moves on to the next. I am not sure how many more tests
>>> are going to run in this pass.
>>
>> And to clarify, this is on HPE OpenVMS 8.4 on Itanium.
Regards,
-John
wb8tyw at qsl.net_work
More information about the Info-vax
mailing list