At http://code.google.com/p/sympy/issues/detail?can=2&q=2950 I give the 
reasons why I don't think it should.

The work is at https://github.com/sympy/sympy/pull/1680 (which disallows 
it).

Should we just let the user shoot themselves in the foot if they request 
Rational from floats or should we insist that input be integer or string?

Note: I incorrectly stated on the PR that Decimal requires int or str 
input. It is "unprejudiced" in accepting floats as well (as demonstrated in 
the python docs).

>>> Decimal(3.2)
Decimal('3.20000000000000017763568394002504646778106689453125')


But here is the problem:

>>> (3.2).as_integer_ratio()
(3602879701896397L, 1125899906842624L)
>>> Rational(*_)
3602879701896397/1125899906842624

Many would expect Rational(3.2) to give 16/5 but that's not the ratio that 
is represented by float 3.2. In order to get that one would have to limit 
the denominator:

>>> _.limit_denominator(10**15)
3199999999999997/999999999999999
>>> _.limit_denominator(10**14)
16/5

Alternatively, internally, the float could be converted to a string (which 
gives abaout 12 digits of precision) so Rational(3.2) would actually do

>>> Rational(str(3.2))
16/5

Thanks for any comments,
 Chris

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sympy/-/Ap9WvE14VdoJ.
To post to this group, send email to sympy@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to