* include/math.h (sqrt): Remove inline definition.

(sqrtf): Replace inline definition with prototype.
	(sqrtl): Likewise.
	* mingwex/math/sqrtf.c (sqrtf): Set domain error if
	argument less than zero.
	* mingwex/math/sqrtf.c (sqrtl): Likewise.

	Correct typo in 2002-10-30 ChangeLog entry.
This commit is contained in:
Danny Smith 2002-11-09 10:44:02 +00:00
parent 49f7ea1675
commit 9da547ff26
3 changed files with 31 additions and 25 deletions

View File

@ -144,12 +144,6 @@ double log (double);
double log10 (double);
double pow (double, double);
double sqrt (double);
extern __inline__ double sqrt (double x)
{
double res;
__asm__ ("fsqrt;" : "=t" (res) : "0" (x));
return res;
}
double ceil (double);
double floor (double);
double fabs (double);
@ -504,19 +498,8 @@ extern __inline__ float powf (float x, float y)
extern long double powl (long double, long double);
/* 7.12.7.5 The sqrt functions. Double in C89. */
extern __inline__ float sqrtf (float x)
{
float res;
__asm__ ("fsqrt" : "=t" (res) : "0" (x));
return res;
}
extern __inline__ long double sqrtl (long double x)
{
long double res;
__asm__ ("fsqrt" : "=t" (res) : "0" (x));
return res;
}
extern float sqrtf (float);
extern long double sqrtl (long double);
/* 7.12.8 Error and gamma functions: TODO */

View File

@ -1,9 +1,20 @@
#include <math.h>
#include <errno.h>
extern float __QNANF;
float
sqrtf (float x)
{
float res;
asm ("fsqrt" : "=t" (res) : "0" (x));
return res;
if (x < 0.0F )
{
errno = EDOM;
return __QNANF;
}
else
{
float res;
asm ("fsqrt" : "=t" (res) : "0" (x));
return res;
}
}

View File

@ -1,8 +1,20 @@
#include <math.h>
#include <errno.h>
extern long double __QNANL;
long double
sqrtl (long double x)
{
long double res;
asm ("fsqrt" : "=t" (res) : "0" (x));
return res;
if (x < 0.0L )
{
errno = EDOM;
return __QNANL;
}
else
{
long double res;
asm ("fsqrt" : "=t" (res) : "0" (x));
return res;
}
}