Re: [ROOT] inf/nan from TMath::Poisson

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Apr 28 2004 - 10:08:45 MEST


Hi Kevin,

Thanks very much for this nice contribution. I agree with all your mods.
They are now in CVS.

Rene Brun

Kevin Lynch wrote:
> 
> I would like to make the following suggestions to fix this and other
> similar problems in TMath.h ... the functions I've "fixed" are those
> that are not internally protected against numerical overflow in
> intermediate calculations, but whose final results should be
> representable.  I've put the code at the following URL so as to shorten
> this message:
> 
> http://g2pc1.bu.edu/~krlynch/rootpatch/TMath.cxx.new
> 
>   ... I have tested all this suggested code, although not extensively.
> In the regions where the current TMath functions are safe, these
> replacements behave similarly;  they also work in regions where the
> current functions fail, including the region where Ken Bloom reported
> the problem, for instance:
> 
> root [2] TMath::Poisson(170,70)
> Error: Symbol inf is not defined in current scope  FILE: LINE:0
> (Double_t)inf
> *** Interpreter error recovered ***
> root [3] TMathnew::Poisson(170,70)
> (Double_t)2.54255920378495108e-24
> root [4] TMath::Poisson(10,5)
> (Double_t)1.81327887078059496e-02
> root [5] TMathnew::Poisson(10,5)
> (Double_t)1.81327887078059427e-02
> 
> In this file, I've "fixed" the functions hypot, TMath::ASinH,
> TMath::ACosH, TMath::Normalize, and TMath::Poisson (although, except for
> Poisson, there likely won't ever be problems with the current code).
> Feel free to use any or all of this code as you see fit...
> 
> >>On Mon, 26 Apr 2004, Rene Brun wrote:
> >>
> >>
> >>>Ken,
> >>>
> >>>I will be happy to add any suggestion you might have to protect the code
> >>>against the case you mention.
> >>>
> >>>Rene Brun
> >>>
> >>>On
> >>>Mon, 26 Apr 2004, Ken Bloom wrote:
> >>>
> >>>
> >>>>Dear ROOTers,
> >>>>
> >>>>    I'm using ROOT 3.05/07, and am getting non-numerical results out of
> >>>>the TMath::Poisson function, under what I admit are extreme conditions:
> >>>>
> >>>>root [2] TMath::Poisson(170,70)
> >>>>Error: Symbol inf is not defined in current scope  FILE: LINE:0
> >>>>(Double_t)inf
> >>>>*** Interpreter error recovered ***
> >>>>
> >>>>Yes, I know that the result should be a very tiny number, but I would prefer
> >>>>that I get 0.0 (or its moral equivalent) rather than something I can't do math
> >>>>with.  Can you recommend a protection against this?  Thanks, best wishes.
> >>>>
> >>>>                                            Ken Bloom
> 
> --
> -------------------------------------------------------------------------------
> Kevin Lynch                             voice:  (617) 353-6025
> Physics Department                      Fax: (617) 353-9393
> Boston University                       office:  PRB-361
> 590 Commonwealth Ave.                   e-mail:  krlynch@bu.edu
> Boston, MA 02215 USA                    http://budoe.bu.edu/~krlynch
> -------------------------------------------------------------------------------



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:07 MET