Project

General

Profile

Actions

Bug #15491

closed

r62701 introduced the incompatibility of Complex#+, #-, and #* removing #ifndef PRESERVE_SIGNEDZERO

Added by mrkn (Kenta Murata) over 5 years ago. Updated over 5 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux]
[ruby-core:<unknown>]

Description

In r62701, preprocessor conditions #ifndef PRESERVE_SIGNEDZERO in f_add, f_mul, and f_sub functions were removed.
These changes introduced the incompatibility for some special cases.

For example, the results of the following code shows the different sign of the imaginary part:

p Complex(-0.0, 0) * Complex(0, 0)
#=> (-0.0+0.0i)  on 2.5.3
#=> (-0.0-0.0i)  on 2.6.0

Moreover, the following code shows the different values in the real part:

class Integer
  def +(*); 42; end
end
p Complex(1, 2) + Complex(0, 1)
#=> (42+42i) on 2.5.3
#=> (0+42i)  on 2.6.0
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0