This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
make perl core quiet under -Wfloat-equal
authorDavid Mitchell <davem@iabyn.com>
Fri, 8 Nov 2013 16:55:28 +0000 (16:55 +0000)
committerDavid Mitchell <davem@iabyn.com>
Sat, 9 Nov 2013 13:09:56 +0000 (13:09 +0000)
commitc279c4550ce59702722d0921739b1a1b92701b0d
tree24ee3a0f32ed60677664c7e43a5b3a52523948b8
parentb78a1974184592bd724e6c3f7a8b1e7d7aa63056
make perl core quiet under -Wfloat-equal

The gcc option -Wfloat-equal warns when two floating-point numbers
are directly compared for equality or inequality, the idea being that
this is usually a logic error, and that you should be checking that the
values are instead very near to each other.

perl on the other hand has lots of reasons to do a direct comparison.

Add two macros, NV_eq_nowarn(a,b) and NV_eq_nowarn(a,b)
that do the same as (a == b) and (a != b), but without the warnings.
They achieve this by instead doing (a < b) || ( a > b).
Under gcc at least, this is optimised into the same code as the direct
comparison.

The are three places that I've left untouched, because they are handling
NaNs, and that gets a bit tricky. In particular (nv != nv) is a test for a
NaN, and replacing it with (< || >) creates signalling NaNs (whereas ==
and != create quiet NaNs)
dump.c
numeric.c
op.c
perl.h
pp.c
pp_sort.c
pp_sys.c
sv.c
sv.h