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
- References:
- Re: Re: Log[4]==2*Log[2]
- From: Andrzej Kozlowski <andrzej@akikoz.net>
- Re: Re: Log[4]==2*Log[2]