On Sat, May 31, 2008 at 3:33 PM, Jason Grout
<[EMAIL PROTECTED]> wrote:
>
> Henryk Trappmann wrote:
>> On May 31, 10:55 pm, Carl Witty <[EMAIL PROTECTED]> wrote:
>>> Actually, there's no homomorphism either way;
>>> RR(R2(2)+R2(3)) != RR(R2(2)) + RR(R2(3))
>>
>> Hm, thats an argument. I somehow thought that it is closer to a
>> homomorphism but perhaps this reasoning has no base.
>>
>>> IMHO, giving a+b the precision of the less-precise operand is better
>>> than using the more-precise operand, because the latter has too much
>>> chance of confusing people who don't understand floating point.  For
>>> instance, if 1.3+RealField(500)(pi) gave a 500-bit number, I'll bet a
>>> lot of people would assume that this number matched 13/10+pi to almost
>>> 500 bits.
>>
>> Hm, yes, but this binary decimal conversion is another topic, I mean
>> nobody would assume that 0.3333333 coerced to 500 *decimal* digits
>> matches 1/3 to 500 digits? I anyway wondered why one can not specify a
>> base in RealField, or did I merely overlook the opportunity?
>>
>>> Of course, maybe there are other choices that are better than either
>>> of these.  We could throw away RealField and always use
>>> RealIntervalField instead; but that's slower, has less special
>>> functions implemented, and has counterintuitive semantics for
>>> comparisons.  We could do pseudo-interval arithmetic, and say that
>>> 1e6+R2(3) should be a 20-bit number, because we know about 20 bits of
>>> the answer; but to be consistent, we should do similar psuedo-interval
>>> arithmetic even if both operands are the same precision,
>>
>> At least RR would then be a ring ;)
>>
>>> and then RR
>>> becomes less useful for people who do understand how floating point
>>> works and want to take advantage of it.
>>
>> Ya, I dont want to change floating point, it just seems somewhat
>> arbitrary to me to coerce down precision, while coercing up precision
>> with integers. Of course if you consider integer with precision
>> infinity (as indeed there are no rounding errors and it is an exact
>> ring) then this makes sense again.
>>
>> But if so then I want to have something like SymbolicNumber which is
>> the subset of SymbolicRing that does not contain variables. And that
>> this SymbolicNumber is coerced automatically down when used with
>> RealField.
>
> I hope this is not superfluous, but there is a SymbolicConstant class,
> which seems to be automatically used when dealing with numbers and not
> variables:
>
> sage: type(SR(3))
> <class 'sage.calculus.calculus.SymbolicConstant'>
> sage: type(1.0*SR(3))
> <class 'sage.calculus.calculus.SymbolicConstant'>

The parent of SymbolicConstant is SymbolicRing.  The parent
is what matters for coercion.

sage: parent(SR(3))
Symbolic Ring

It would be conceivable that we could have a SymbolicConstant
ring that is a subring of the full SymbolicRing.    I haven't thought
through at all how this would work, but it might address the
OP's confusion.    Note that it would problematic in Sage, since
e.g., if x = var('x'), then x + 1 - x is the symbolic 1, so we have
that the sum of two elements of SR would be in SC, i.e., rings
wouldn't be closed under addition.   This would take a lot of care
to actually do.  I'm not saying any of this should be done.

William

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to