Issue #10378 has been updated by Takeshi Nishimatsu.


Objection.

Especially for Float, Complex(1.0,0.0) and Complex(1.0,-0.0) have meanings:
sqrt[-x+i(+0)]=i*sqrt(x) 
sqrt[-x+i(-0)]=-i*sqrt(x) 
So, they are complex. Not real.
And, please see the man page of cproj(3), though cproj is not implemented in Ruby.

Please see Goldberg's review.
http://docs.oracle.com/cd/E19957-01/806-4847/ncg_goldberg.html (EUC encoded)
http://iss.ndl.go.jp/books/R100000039-I001404293-00
@article{goldberg1991ecs,
    title={What every computer scientist should know about floating-point arithmetic},
    author={David Goldberg},
    journal={ACM Computing Surveys},
    volume={23},
    number={1},
    pages={5--48},
    year={1991}}
http://dl.acm.org/citation.cfm?id=103163
This good review is also linked from https://bugs.ruby-lang.org/projects/ruby/wiki/HowToReportJa .

BTW, I do not like
-1.0-0.0i   =>   (-1.0+0.0i) ,
though I know that it is translated as
-1.0-0.0i   =>   Complex(-1.0,0.0)-Complex(0.0,-0.0)   =>   (-1.0+0.0i) .


----------------------------------------
Feature #10378: [PATCH 0/3] It's better (1 + 0i).real? return true
https://bugs.ruby-lang.org/issues/10378#change-49677

* Author: gogo tanaka
* Status: Open
* Priority: Normal
* Assignee: 
* Category: core
* Target version: current: 2.2.0
----------------------------------------
Right now, `Complex#real?` return `false` anytime. 

I suppose `#is_a?(Complex)` is enough to check whether a object is `Complex`'s object or not.
(I have to admire `#real?` is more useful than `#is_a?(Complex)`)

But what we really want to know is whether a object whose class has `Numeric` as superclass  is equal to real number or not.

Actually whichever is ok, modifying `#real?` or implementing as new method(e.g #real_num? ... :(  

Anyway, I wanna method like that for `Complex`.

```cpp
static VALUE
nucomp_real_p(VALUE self)
{
    get_dat1(self);
    if (rb_equal(dat->imag, INT2FIX(0))) {
        return Qtrue;
    }
    return Qfalse;
}
```

By the way, I can find two coding styles through ruby source code.

Which is prefer?  it doesn't matter?

```cpp
if(...)
    return ...
retrun ...
```

or 

```cpp
if(...) {
    return ...
}
retrun ...
```


---Files--------------------------------
update_NEWS.patch (716 Bytes)
add_tests.patch (848 Bytes)
update_Complex#real_.patch (1.18 KB)


-- 
https://bugs.ruby-lang.org/