Port-vax archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Building current...



In article <565E5BE9.5090607%update.uu.se@localhost>,
Johnny Billquist  <bqt%update.uu.se@localhost> wrote:
>On 2015-12-02 03:05, Christos Zoulas wrote:
>> In article <3F70DD86-0204-466E-8082-CBAD923F8B84%comcast.net@localhost>,
>> Paul Koning  <paulkoning%comcast.net@localhost> wrote:
>>>
>>>> On Dec 1, 2015, at 6:29 PM, Johnny Billquist <bqt%softjar.se@localhost> wrote:
>>>>
>>>> After some hiatus, "my" VAX 8650 is back among the living, so I
>>> decided to try and build current again.
>>>> ...
>>>> Now the "analysis". It appears that programs call log10() with an
>>> argument of 0, and consider this to be normal.
>>>> Unfortunately, this is one of those places where the VAX not doing
>>> IEEE FP bites us. The IEEE log10() of 0 will return -inf, and happily
>>> chug on. The VAX log10() of 0 will cause an illegal instruction trap.
>>>>
>>>> I suspect the other programs crashing might be because of the same
>>> reason. The question is - what should we do? I'm tempted to just change
>>> the code for log() to return 0, or possible -MAX_whatever and not trap.
>>> Opinions?
>>>
>>> Why not simply fix the bug?  log(0) is invalid.  It's probably an
>>> initialization error, where log() is used for some magic timekeeping
>>> math that is only valid the second time around.
>>
>> I fixed it.
>
>Care to share some details of how you fixed it?

The code really want ilog2() it is an accident that it works anyway
because it clamps the entries. I made it not use the log if the number
of keys is <= 4. Check out this test program:

#include <stdio.h>
#include <math.h>
#include <sys/types.h>

#include <sys/bitops.h>

static inline u_short
auth_log2(double x)
{
        return (u_short)(log10(x) / log10(2));
}

int
main(void)
{
	unsigned long i;
	for (i = 0; i < 100; i++)
		printf("%lu %ld %ld\n", i, (long)auth_log2(i / 4.0) + 1,
		    (long)ilog2(i) - 1);
	return 0;
}

christos



Home | Main Index | Thread Index | Old Index