[#56965] [ruby-trunk - Bug #8852][Open] Synology build of ruby-2.0.0-p247 is failing — "barbecuesteve (Steve Sparks)" <sparks@...>

12 messages 2013/09/02

[#57051] [ruby-trunk - Bug #8872][Open] Case statements do not honor a refinement of the '===' method — "jconley88 (Jon Conley)" <schnozberries@...>

21 messages 2013/09/07

[#57058] [ruby-trunk - Bug #8875][Open] Select is not usable with SSLSocket — "headius (Charles Nutter)" <headius@...>

11 messages 2013/09/07

[#57074] [ruby-trunk - Bug #8879][Open] String#to_r fails after moving ruby to other OSX system — "mpapis (Michal Papis)" <mpapis@...>

12 messages 2013/09/08

[#57092] [ruby-trunk - Bug #8883][Open] Rational canonicalization unexpectedly converts to Fixnum — "melquiades (Paul Cantrell)" <cantrell@...>

16 messages 2013/09/09

[#57109] [ruby-trunk - Bug #8886][Open] TracePoint API inconsistence when raise used — deivid (David Rodríguez) <deivid.rodriguez@...>

14 messages 2013/09/10

[#57111] [ruby-trunk - Feature #8887][Open] min(n), max(n), min_by(n), max_by(n) — "akr (Akira Tanaka)" <akr@...>

13 messages 2013/09/10

[#57131] [ruby-trunk - Feature #8895][Open] Destructuring Assignment for Hash — "chendo (Jack Chen)" <ruby-lang@...>

19 messages 2013/09/11

[#57186] [ruby-trunk - Feature #8909][Open] Expand "f" frozen suffix to literal arrays and hashes — "headius (Charles Nutter)" <headius@...>

37 messages 2013/09/14

[#57262] [ruby-trunk - Feature #8921][Open] Allow select, reject, etc to accept a regex — "kyledecot (Kyle Decot)" <kyle.decot@...>

13 messages 2013/09/18

[#57273] [ruby-trunk - Feature #8923][Open] Frozen nil/true/false — "ko1 (Koichi Sasada)" <redmine@...>

13 messages 2013/09/19

[#57353] [ruby-trunk - Feature #8948][Open] Frozen regex — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

19 messages 2013/09/24

[#57385] [ruby-trunk - Bug #8953][Open] `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal — "gfx (Goro Fuji)" <gfuji@...>

12 messages 2013/09/26

[#57396] [ruby-trunk - Feature #8956][Open] Allow hash members delimited by \n inside of {} — "adamdunson (Adam Dunson)" <adam@...>

20 messages 2013/09/26

[ruby-core:57127] [ruby-trunk - Bug #8894] Fixnum#quo returns wrong result when given a float

From: "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
Date: 2013-09-11 04:24:34 UTC
List: ruby-core #57127
Issue #8894 has been updated by marcandre (Marc-Andre Lafortune).


Issue is actually with Rational#/ that apparently makes a special case of float values that are "multiples" of the denominator, so that:

    Rational(6) / 2.0 # => Rational(6, 2)

Putting aside the bug that the Rational returned is not reduced, I feel it is the wrong to return a Rational for many reasons.

1) A float is imprecise; other than very special cases one should not obtain exact values whenever one is involved in the calculation.
2) Inconsistent with Rational(5) / BigDecimal(2) that returns (correctly) a BigDecimal)
3) Inconsistent with Rational(6) / 1.5, that returns which won't return 4 nor Rational(4)

Is there any reason we should keep that special case?

diff --git a/rational.c b/rational.c
index 652f5ac..f8284d9 100644
--- a/rational.c
+++ b/rational.c
@@ -959,9 +959,6 @@ nurat_div(VALUE self, VALUE other)
 
            if (isnan(x)) return DBL2NUM(NAN);
            if (isinf(x)) return INT2FIX(0);
-           if (x != 0.0 && modf(x, &den) == 0.0) {
-               return rb_rational_raw2(dat->num, f_mul(rb_dbl2big(den), dat->de
-           }
        }
        return rb_funcall(f_to_f(self), '/', 1, other);
     }

----------------------------------------
Bug #8894: Fixnum#quo returns wrong result when given a float
https://bugs.ruby-lang.org/issues/8894#change-41733

Author: marcandre (Marc-Andre Lafortune)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: p195
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


Fixnum#quo is buggy.

  2.quo(2.0) # => Rational(2, 2)

1) Should return a float, not a rational
2) Moreover, that rational is invalid as it is not reduced.

Noticed by David MacMahon [ruby-core:57121]


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

In This Thread