Date: Thu, 30 Jan 2014 02:23:25 +0400 From: Dmitry Marakasov <amdmi3@amdmi3.ru> To: Steve Kargl <sgk@troutmask.apl.washington.edu> Cc: freebsd-current@FreeBSD.org Subject: Re: libm lacks C99 functions -> no c++11 cmath in libstdc++ Message-ID: <20140129222325.GA9806@hades.panopticon> In-Reply-To: <20140129215928.GA89714@troutmask.apl.washington.edu> References: <20140129164136.GA3489@hades.panopticon> <20140129172307.GA88757@troutmask.apl.washington.edu> <20140129184735.GA63095@hades.panopticon> <20140129215928.GA89714@troutmask.apl.washington.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
* Steve Kargl (sgk@troutmask.apl.washington.edu) wrote:
> > > > - bad enough by itself, it affects libstdc++ from ports' gcc in such a
> > > >   way that it disables C++11 math completely (along with a lot more
> > > >   other more widely used math functions)
> > > >
> > > >
> > > > - we may probably implement these by calling less-precise
> > > >   erf erfc lgamma tgamma as we do with other functions as we alredy
> > > >   do with some others
> > > 
> > > This, unfortuantely, has already been done, although it may only 
> > > be available in FreeBSD-current.  See src/lib/msun/src/imprecise.c.
> > 
> > I know, it's available on 10.0 as well. However that's not the case for
> > 9.x, for which it's impossible to build c++11 math using software (even
> > if it doesn't use unimplemented functions), neither with system gcc
> > nor with gcc from ports.
> > 
> 
> It's not impossible.  Add whatever C++-fu you need
> that is equivalent to
> 
> #include <math.h>
> #ifndef fool
> #define fool(x)	foo((double)(x))
> #endif
The point was that one should not be required to do something like this
to build std::hypot - using software on FreeBSD.
---
+#define _GLIBCXX_USE_C99_MATH_TR1
+#include <math.h>
+long double erfl(long double x) { return erf(x); }
+long double erfcl(long double x) { return erfc(x); }
+long double lgammal(long double x) { return lgamma(x); }
+long double tgammal(long double x) { return tgamma(x); }
+
 #include <cmath>
 int main() { std::hypot(3.0, 4.0); }
---
-- 
Dmitry Marakasov   .   55B5 0596 FF1E 8D84 5F56  9510 D35A 80DD F9D2 F77D
amdmi3@amdmi3.ru  ..:  jabber: amdmi3@jabber.ru    http://www.amdmi3.ru
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140129222325.GA9806>
