January 05, 2011 lgamma & gamma reentrant | ||||
|---|---|---|---|---|
| ||||
I need some feedback from some of the math nerds on the list. The functions gammaf and lgammaf are not reentrant and set a global 'signgam' to indicate the sign. Currently it looks like druntime/phobos2 use these non-reentrant versions, which could cause some issues in a threaded environment. My questions for the math nerds are: How important is this signgam value? Should we provide a safe way of getting this value? In std.math should we wrap the reentrant versions and store signgam in TLS, or should we expose the *_r reentrant versions in std.math directly? I think now in D2 global variables are stored thread-local by default, so providing a safe signgam would be trivial (of course only accessible to the thread that called the lgamma/gamma). Another option is to just leave it alone. Personally I couldn't care less since I have never used the functions. -- tbone | ||||
January 05, 2011 Re: lgamma & gamma reentrant | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Travis Boucher | On Wed, 05 Jan 2011 11:33:30 -0700, Travis Boucher wrote: > I need some feedback from some of the math nerds on the list. > > The functions gammaf and lgammaf are not reentrant and set a global 'signgam' to indicate the sign. > > Currently it looks like druntime/phobos2 use these non-reentrant versions, which could cause some issues in a threaded environment. > > My questions for the math nerds are: > > How important is this signgam value? > > Should we provide a safe way of getting this value? > > In std.math should we wrap the reentrant versions and store signgam in TLS, or should we expose the *_r reentrant versions in std.math directly? > > I think now in D2 global variables are stored thread-local by default, so providing a safe signgam would be trivial (of course only accessible to the thread that called the lgamma/gamma). > > Another option is to just leave it alone. Personally I couldn't care less since I have never used the functions. > > -- tbone Phobos does not use the C gamma functions anymore. Instead, there are native D implementations in the std.mathspecial module (as of the latest release), that don't have this problem. See: http://www.digitalmars.com/d/2.0/phobos/std_mathspecial.html http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/ mathspecial.d -Lars | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply