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.

Reply via email to