2011/4/2 Prof Brian Ripley <[email protected]>: > Consider the following C program: > > #include <stdlib.h> > #include <stdio.h> > #include <math.h> > > int main() > { > double x = 0.5; > printf("%f, %f\n", -expm1(x), 1-exp(x)); > exit(0); > } > > If I compile this under mingw-w64-1.0-bin_i686-mingw_20110401.zip I > get the correct: > > -0.648721, -0.648721 > > However, if I compile it under mingw-w64-bin_i686-mingw_20110401.zip > (or TDM's 4.5.2 build) I get > > -0.271537, -0.648721 > > It seems that this is using a function from libmingwex.a, and that is > faulty. The code used would appear to be from > mingw/mingw-w64-crt/math/expm1.def.h, and > > if (__FLT_ABI (fabs) (x) < __FLT_LOGE2) > { > x *= __FLT_LOGE2; > __asm__ __volatile__ ("f2xm1" : "=t" (x) : "0" (x)); > return x; > } > > is simply wrong: you need > > if (__FLT_ABI (fabs) (x) < __FLT_LOGE2) > { > x /= __FLT_LOGE2; > __asm__ __volatile__ ("f2xm1" : "=t" (x) : "0" (x)); > return x; > } > > since exp(x) - 1 is 2^(x/log(2)) - 1. > > Brian Ripley > > -- > Brian D. Ripley, [email protected] > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595
Hello, Brian, thank you for finding and showing this issue. Indeed a typo/thinko. I commmitted you fix at revision 4103. Regards, Kai ------------------------------------------------------------------------------ Create and publish websites with WebMatrix Use the most popular FREE web apps or write code yourself; WebMatrix provides all the features you need to develop and publish your website. http://p.sf.net/sfu/ms-webmatrix-sf _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
