MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Re: Log[4]==2*Log[2]

  • To: mathgroup at smc.vnet.net
  • Subject: [mg50620] Re: [mg50599] Re: [mg50557] Re: [mg50520] Log[4]==2*Log[2]
  • From: Andrzej Kozlowski <andrzej at akikoz.net>
  • Date: Mon, 13 Sep 2004 02:19:39 -0400 (EDT)
  • References: <200409120842.EAA01340@smc.vnet.net> <opsd8augkviz9bcq@monster.cox-internet.com> <9144B6AA-0511-11D9-9D11-000A95B4967A@akikoz.net> <opsd8qdyosiz9bcq@monster.cox-internet.com>
  • Sender: owner-wri-mathgroup at wolfram.com

I disagree, though of course this is a matter of design, which is to 
some extent is a matter of taste and judgement, not mathematics.
When I wrote an "error" I meant a (likely) programmer's error, not 
Mathematica's error. In my judgement,  in real life situations, when, 
in a program and equality appears that Mathematica is unable to verify 
it is very likely to be something unintended; most probably the 
programmer forgot to use N. On the other hand whenever you use Simplify 
you are (or at least should be) aware that Mathematica may fail to 
return what you are expecting (or hoping for). That is in the nature of 
Simplify and realizing this fact is an essential aspect of 
understanding Mathematica. So, in my opinion, there is a good reason 
for treating these two cases differently.

Andrzej



On 13 Sep 2004, at 09:59, DrBob wrote:

> *This message was transferred with a trial version of CommuniGate(tm) 
> Pro*
>>> it seems to me that it is a good idea
>>> for errors to produce error  messages
>
> It's not an error. If we ask Simplify to recognize an equality, we 
> (usually) don't get an error message if it fails; we just get back the 
> original expression. This is NO different.
>
> In fact, for the expression Log[4]==2Log[2], Simplify returns True as 
> it should--but too late to avoid the "error" message from Equal. 
> That's just dumb.
>
> Log[4]==2Log[2]//Simplify
>
> \!\(\*
>   RowBox[{\(N::"meprec"\), \(\(:\)\(\ \)\), "\<\"Internal precision
>       limit $MaxExtraPrecision = \\!\\(50.`\\) reached while 
> evaluating \
> \\!\\(\\(\\(\\(\\(-2\\)\\)\\\\ \\(\\(Log[2]\\)\\)\\)\\) + \
> \\(\\(Log[4]\\)\\)\\). \\!\\(\\*ButtonBox[\\\"More?\\\", \
> ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \
> ButtonData:>\\\"General::meprec\\\"]\\)\"\>"}]\)
>
> True
>
> Bobby
>
> On Mon, 13 Sep 2004 08:14:59 +0900, Andrzej Kozlowski 
> <andrzej at akikoz.net> wrote:
>
>> *This message was transferred with a trial version of CommuniGate(tm) 
>> Pro*
>>
>> On 13 Sep 2004, at 04:24, DrBob wrote:
>>
>>>
>>> If Equal can't decide equality for exact expressions, then it should
>>> return unevaluated. It shouldn't interrupt everything with a useless
>>> error message.
>>>
>>> Bobby
>>
>> I am not sure about that. You are right as far as the "aesthetics" of
>> the interface of CAS  is concerned. But when this sort of thing 
>> happens
>> in a program it is likely to be the result of an error (probably not
>> intended by the programmer) and it seems to me that it is a good idea
>> for errors to produce error  messages since it makes it debugging
>> easier (such messages can be caught with Check).
>>
>> Andrzej
>>
>>>
>>>
>>> On Sun, 12 Sep 2004 04:42:10 -0400 (EDT), Andrzej Kozlowski
>>> <andrzej at akikoz.net> wrote:
>>>
>>>> Actually, I don't think Mathematica does any real "determining" 
>>>> since
>>>> it does not replace the exact values given in the input by
>>>> numerical approximations. The message issued is, I think, purely
>>>> formal. Mathematica could not determine anything because it tries to
>>>> compare the numbers "numerically" without using approximate 
>>>> numerical
>>>> values, which can't be done. (You have to apply N for it to use
>>>> numerical values). That't what I meant by "not surprisingly". I 
>>>> don't
>>>> think I  really understand your point?
>>>>
>>>> ANdrzej
>>>>
>>>>
>>>> On 11 Sep 2004, at 01:52, DrBob wrote:
>>>>
>>>>
>>>>>>> Mathematica does not apply any simplification rules but just 
>>>>>>> tries
>>>>>>> to
>>>>>>> evaluate the expression numerically and, not
>>>>>>> surprisingly, it can't determine if the LHS is zero or not
>>>>>>> up to the required precision.
>>>>>
>>>>> On the contrary, I think the error message itself clearly indicates
>>>>> the difference IS zero to "the required precision". If 50 digits
>>>>> extra
>>>>> precision isn't enough to determine that the difference ISN'T zero,
>>>>> why doesn't Equal return True?
>>>>>
>>>>> Bobby
>>>>>
>>>>> On Fri, 10 Sep 2004 04:05:56 -0400 (EDT), Andrzej Kozlowski
>>>>> <andrzej at akikoz.net> wrote:
>>>>>
>>>>>> On 9 Sep 2004, at 18:17, Andreas Stahel wrote:
>>>>>>
>>>>>>>
>>>>>>> To whom it may concern
>>>>>>>
>>>>>>> the following answer of Mathematica 5.0 puzzeled me
>>>>>>>
>>>>>>> Log[4]==2*Log[2]
>>>>>>> leads to
>>>>>>>
>>>>>>> N::meprec: Internal precision limit $MaxExtraPrecision = 50.`
>>>>>>> reached
>>>>>>> while \
>>>>>>> evaluating -2\Log[2]+Log[4]
>>>>>>>
>>>>>>> with the inputs given as answer. But the input
>>>>>>>
>>>>>>> Log[4.0]==2*Log[2]
>>>>>>>
>>>>>>> leads to a sound "True"
>>>>>>>
>>>>>>> Simplify[Log[4]-2*Log[2]]
>>>>>>> leads to the correct 0, but
>>>>>>> Simplify[Log[4]-2*Log[2]==0]
>>>>>>> yields no result
>>>>>>>
>>>>>>> There must be some systematic behind thid surprising behaviour.
>>>>>>> Could somebody give me a hint please
>>>>>>>
>>>>>>> With best regards
>>>>>>>
>>>>>>> Andreas
>>>>>>> --
>>>>>>> Andreas Stahel       E-Mail: Andreas.Stahel at [ANTI-SPAM]hti.bfh.ch
>>>>>>> Mathematics, HTI     Phone: ++41 +32 32 16 258
>>>>>>> Quellgasse 21        Fax:   ++41 +32 321 500
>>>>>>> CH-2501 Biel         WWW:   www.hta-bi.bfh.ch/~sha
>>>>>>> Switzerland
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> When you enter
>>>>>>
>>>>>> Log[4] - 2*Log[2] == 0
>>>>>>
>>>>>> Mathematica does not apply any simplification rules but just tries
>>>>>> to
>>>>>> evaluate the expression numerically and, not surprisingly, it 
>>>>>> can't
>>>>>> determine if the LHS is zero or not up to the required precision.
>>>>>>
>>>>>> If you use
>>>>>>
>>>>>> Simplify[Log[4] - 2*Log[2] == 0]
>>>>>>
>>>>>> Mathematica first tries to evaluate the argument of Simplify and 
>>>>>> the
>>>>>> same thig happens as above, but then it actually applies Simplify 
>>>>>> to
>>>>>> the output and gets the right answer True.
>>>>>>
>>>>>> The best thing to do is:
>>>>>>
>>>>>>
>>>>>> Simplify[Unevaluated[Log[4]-2*Log[2]==0]]
>>>>>>
>>>>>>
>>>>>> True
>>>>>>
>>>>>> which avoids evaluation of the argument and instead uses Simplify 
>>>>>> on
>>>>>> the unevaluated input.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Andrzej Kozlowski
>>>>>> Chiba, Japan
>>>>>> http://www.akikoz.net/~andrzej/
>>>>>> http://www.mimuw.edu.pl/~akoz/
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> DrBob at bigfoot.com
>>>>> www.eclecticdreams.net
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> DrBob at bigfoot.com
>>> www.eclecticdreams.net
>>>
>>
>>
>>
>
>
>
> -- 
> DrBob at bigfoot.com
> www.eclecticdreams.net
>


  • Prev by Date: Re: Re: Re: Log[4]==2*Log[2]
  • Next by Date: Notebooks for Junior High School Math
  • Previous by thread: Re: Re: Re: Log[4]==2*Log[2]
  • Next by thread: Re: Re: Re: Log[4]==2*Log[2]