develooper Front page | | Postings from August 2000

38 (v2): Standardise Handling Of Abnormal Numbers Like InfinitiesAnd NaNs

Casey R. Tweten
August 24, 2000 09:49
38 (v2): Standardise Handling Of Abnormal Numbers Like InfinitiesAnd NaNs
Message ID:
=head1 TITLE

Standardise Handling Of Abnormal Numbers Like Infinities And NaNs

=head1 VERSION

  Maintainer: Jarkko Hietaniemi <>
  Date: 05 Aug 2000
  Version: 2
  Mailing List:
  Number: 38


The handling of various abnormal numeric entities like infinities
(positive, negative), not-a-numbers (NaNs, various kinds of those,
signaling, non-signaling), epsilons (positive and negative) is left to
the native math libraries.  A more concerted effort to standardise the
behaviour of Perl across platforms would be desirable.


The abstract pretty much took care of it.


In an SV have bits that mark whether the numeric aspect of the scalar
is abnormal and if so, what kind of abnormality are we dealing with.
The Perl math operations have to watch out for those bits and do The
Right Thing before the native math ops kick in, so that for example
infinity + anything-but-nan = infinity, anything + nan = nan, and so on.

Watching out for the abnormality bits may be a performance hit.  If
so, it may be possible during the configuration phase probe how well
the native math semantics obey the semantics we define for Perl, and
let the native math take care of where it and us agree.

mjd quoth:

        If Perl supported bignums as a native scalar type, then
        handling of nans and infinities would come out of that naturally.

        Supporting bignums in Perl would insulate users from details
        of integer and float size on native platforms and would
        improve portability of Perl programs.

        Programs would be more robust.  Instead of failing
        mysteriously when a number overflowed, they would continue to
        work properly.
        Prior art:  Lisp.


        PDL::Math [suggested by Tim Jenness]
        p6rfc for bigints [to be written]

print(join(' ', qw(Casey R. Tweten)));my $sig={mail=>'',site=>
''};print "\n",'.'x(length($sig->{site})+6),"\n";
print map{$_.': '.$sig->{$_}."\n"}sort{$sig->{$a}cmp$sig->{$b}}keys%{$sig};
my $VERSION = '0.01'; #'patched' by Jerrad Pierce <belg4mit at MIT dot EDU> Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About