Thanks Paolo, yes, I saw that indeed and it is most likely relevant. I was
hoping my problem would be sufficiently more specific; in particular, I'd
like to detect whether the value being above 0 is likely a rounding error
(in which case I can just round it down to 0 again) or likely a mistake on
my part in my equations or in their implementation.

On Tue, Oct 20, 2015 at 2:24 PM, Paolo Giarrusso <[email protected]>
wrote:

> On Tuesday, October 20, 2015 at 12:15:21 PM UTC+2, Laurent Orseau wrote:
> > The built-in log-space arithmetic operations are wonderful. (Thanks so
> much Neil!)
> >
> >
> > It sometimes happens that after some log-operations where the result is
> very close to 0 that it actually goes slightly above 0 as a result of
> floating point errors, and thus is not a log-probability anymore, which
> gave me a few headaches.
> >
> >
> >
> > One obvious approach is to surround the result with a check, and if it
> is positive but not, say, above 1e-8 then round it down to 0, otherwise
> raise an exception if positive.
> >
> >
> > But this feels like a hack and I was wondering if there was any "good"
> way to ensure that any correct log-space operation remains a
> log-probability  (i.e., never goes above 0).
> >
> >
> > Thanks,
> > Laurent
>
> If lg+ is involved, this discussion in the docs seems relevant — apologies
> if you've seen that already:
>
> http://docs.racket-lang.org/math/flonum.html#%28def._%28%28lib._math%2Fflonum..rkt%29._lg-%29%29
> ?
>
> After explaining that a good solution is an open research problem, docs
> state:
> >  Further, catastrophic cancellation is unavoidable when logx and logy
> themselves have error, which is by far the common case. [...] There are
> currently no reasonably fast algorithms for computing lg+ and lg- with low
> relative error. For now, if you need that kind of accuracy, use
> math/bigfloat.
>
> Disclaimer: not an expert here, might well be missing something.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to