#16385: Fix rounding ZZ -> Python float
------------------------------------+------------------------
       Reporter:  jdemeyer          |        Owner:
           Type:  defect            |       Status:  new
       Priority:  major             |    Milestone:  sage-6.3
      Component:  basic arithmetic  |   Resolution:
       Keywords:                    |    Merged in:
        Authors:  Jeroen Demeyer    |    Reviewers:
Report Upstream:  N/A               |  Work issues:
         Branch:                    |       Commit:
   Dependencies:                    |     Stopgaps:
------------------------------------+------------------------
Description changed by jdemeyer:

Old description:

> Consider the following conversions:
> A. Sage `Integer` -> Python `float` (or Sage `RDF`)
> B. Python `int`/`long` -> Python `float`
> C. Sage `Integer` -> Sage `RR`
> D. C `unsigned long` -> C `double`
>
> Conversion A rounds to zero, while the others round to nearest (by
> default). We should make A consistent with the rest:
>
> {{{
> sage: int(float(ZZ(10^17-1)))
> 99999999999999984
> sage: int(float(int(10^17-1)))
> 100000000000000000
> sage: int(RR(10^17-1))
> 100000000000000000
> sage: cython("""print <unsigned long>(<double> (%sUL))""" % (10^17-1))
> 100000000000000000
> }}}
>
> Currently, `Integer` -> `float` uses `mpz_get_d()` which rounds to zero.
> Doing the conversion via `mpfr` should fix this.

New description:

 Consider the following conversions:
 A. Sage `Integer` -> Python `float` (or Sage `RDF`)
 B. Python `int`/`long` -> Python `float`
 C. Sage `Integer` -> Sage `RR`
 D. C `unsigned long` -> C `double`

 Conversion A rounds to zero, while the others round to nearest (by
 default). We should make A consistent with the rest:

 {{{
 sage: int(float(ZZ(10^17-1)))
 99999999999999984
 sage: int(float(int(10^17-1)))
 100000000000000000
 sage: int(RR(10^17-1))
 100000000000000000
 sage: cython("""print <unsigned long>(<double> (%sUL))""" % (10^17-1))
 100000000000000000
 }}}

 Currently, `Integer` -> `float` uses `mpz_get_d()` which rounds to zero.
 We should fix this, similar to #14416.

--

--
Ticket URL: <http://trac.sagemath.org/ticket/16385#comment:3>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to