[Info-vax] gnulib test-fmal-ieee failure help needed.

Craig A. Berry craigberry at nospam.mac.com
Sun Jul 23 19:38:21 EDT 2017


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>


>> 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