On Sat, Jul 23, 2011 at 5:59 PM, Matthew Brett <[email protected]> wrote: > Hi, > > On Sun, Jul 24, 2011 at 12:36 AM, Aaron Meurer <[email protected]> wrote: >> On Sat, Jul 23, 2011 at 5:28 PM, Matthew Brett <[email protected]> >> wrote: >>> Hi, >>> >>> On Sun, Jul 24, 2011 at 12:23 AM, Aaron Meurer <[email protected]> wrote: >>>> Note that Float(1) is not the same as Float(1.0). Fredrik or someone >>>> else would have to explain the details, but I think the reasoning >>>> behind Float(int) => Integer is something related to precision. >>> >>> Right, sorry, I should have added that: >>> >>> sympy.Float(1.0) == sympy.numbers.One() >> >> ==, yes, but is, no. > > Surely == is the relevant operator? > >> In [2]: Float(1.0) is S.One >> Out[2]: False >> >> In [3]: Float(1.0) == S.One >> Out[3]: True >> >> == works because of some type casting. You also get, for example: >> >> In [4]: 0.5 == Rational(1, 2) >> Out[4]: True >> >>> >>>> Also, as the commit message notes, there is the following >>>> inconsistency in 0.6.7: >>>> >>>> In [1]: -1.0*x >>>> Out[1]: -1.0⋅x >>>> >>>> In [2]: 1.0*x >>>> Out[2]: x >>> >>> To me, that inconsistency is a benefit. Is there some disbenefit? >>> I'm asking honestly. For me it is just a question of reduced >>> readability in doctests and examples. >>> >>> Cheers, >>> >>> Matthew >>> >> >> Yes, I think there is a disbenefit, because you loose the precision >> information in 1.0 when you convert it to S.One. >> >> This will happen when you use Floats. They are assumed to be close to >> (up to their precision), but not necessarily equal to the numbers the >> represent. So with the default precision of 15 or something like >> that, 1.0 is really 1 +- 1e-15. If you really want exact numbers >> (i.e., rationals), you should use them. Otherwise, SymPy assumes that >> Floats are not exact, and treats them as such. > > I believe that the integers up to around 2^52 are exactly > representable in 64 bit doubles: > > http://stackoverflow.com/questions/440204/does-floor-return-something-thats-exactly-representable > > so 1.0 will always be exactly representable in float. Indeed, it > seems to me confusing to imply that I don't have exactly 1.0 by > retaining it. > >> Others, if any of this is not true, please correct me. >> >> By the way, if you want to convert from floats to rationals, you can >> use nsimplify: >> >> In [14]: nsimplify(1.0*x, rational=True) >> Out[14]: x > > Right - but it seems ugly and unfortunate to add that to the doctests, > and examples, especially where we have matrices where we have to > iterate over all the values looking for these guys. > > Well - sorry - I'll consider my peanut thrown and missed :) > > Cheers, > > Matthew >
Well, maybe others could chip in here. Aaron Meurer -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
