Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

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: [mg50622] Re: [mg50599] Re: [mg50557] Re: [mg50520] Log[4]==2*Log[2]
  • From: DrBob <drbob at bigfoot.com>
  • Date: Wed, 15 Sep 2004 01:49:14 -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> <3ADADD30-0534-11D9-AE14-000A95B4967A@akikoz.net>
  • Reply-to: drbob at bigfoot.com
  • Sender: owner-wri-mathgroup at wolfram.com

>> When I wrote an "error" I meant a (likely) programmer's error, not
>> Mathematica's error.

So did I.

>> 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.

If I use N, don't I still get an error message, even though Mathematica DOES verify the equality?

Log[4]\[Equal]2Log[2]//N

\!\(\*
   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

>> 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).

If I use Simplify, don't I still get an error message, even though I _do_ get what I'm expecting, otherwise?

Simplify[Log[4]==2Log[2]]

\!\(\*
   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

Tell me again why that isn't dumb?

Bobby

On Mon, 13 Sep 2004 12:23:06 +0900, Andrzej Kozlowski <andrzej at akikoz.net> wrote:

> *This message was transferred with a trial version of CommuniGate(tm) Pro*
> 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
>>
>
>
>



-- 
DrBob at bigfoot.com
www.eclecticdreams.net


  • Prev by Date: Re: Simplify[ {Re[Sqrt[-1 + eta^2]], Im[Sqrt[-1 + eta^2]]}, eta<1]
  • Next by Date: Re: Re: Re: Log[4]==2*Log[2]
  • Previous by thread: Re: Re: Re: Log[4]==2*Log[2]
  • Next by thread: Re: Re: Re: Log[4]==2*Log[2]