mirror of
				https://github.com/python/cpython.git
				synced 2025-11-02 14:41:33 +00:00 
			
		
		
		
	svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
  r81032 | antoine.pitrou | 2010-05-09 17:52:27 +0200 (dim., 09 mai 2010) | 9 lines
  Recorded merge of revisions 81029 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk
  ........
    r81029 | antoine.pitrou | 2010-05-09 16:46:46 +0200 (dim., 09 mai 2010) | 3 lines
    Untabify C files. Will watch buildbots.
  ........
................
		
	
			
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "Python.h"
 | 
						|
 | 
						|
#ifdef X87_DOUBLE_ROUNDING
 | 
						|
/* On x86 platforms using an x87 FPU, this function is called from the
 | 
						|
   Py_FORCE_DOUBLE macro (defined in pymath.h) to force a floating-point
 | 
						|
   number out of an 80-bit x87 FPU register and into a 64-bit memory location,
 | 
						|
   thus rounding from extended precision to double precision. */
 | 
						|
double _Py_force_double(double x)
 | 
						|
{
 | 
						|
    volatile double y;
 | 
						|
    y = x;
 | 
						|
    return y;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef HAVE_GCC_ASM_FOR_X87
 | 
						|
 | 
						|
/* inline assembly for getting and setting the 387 FPU control word on
 | 
						|
   gcc/x86 */
 | 
						|
 | 
						|
unsigned short _Py_get_387controlword(void) {
 | 
						|
    unsigned short cw;
 | 
						|
    __asm__ __volatile__ ("fnstcw %0" : "=m" (cw));
 | 
						|
    return cw;
 | 
						|
}
 | 
						|
 | 
						|
void _Py_set_387controlword(unsigned short cw) {
 | 
						|
    __asm__ __volatile__ ("fldcw %0" : : "m" (cw));
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
#ifndef HAVE_HYPOT
 | 
						|
double hypot(double x, double y)
 | 
						|
{
 | 
						|
    double yx;
 | 
						|
 | 
						|
    x = fabs(x);
 | 
						|
    y = fabs(y);
 | 
						|
    if (x < y) {
 | 
						|
        double temp = x;
 | 
						|
        x = y;
 | 
						|
        y = temp;
 | 
						|
    }
 | 
						|
    if (x == 0.)
 | 
						|
        return 0.;
 | 
						|
    else {
 | 
						|
        yx = y/x;
 | 
						|
        return x*sqrt(1.+yx*yx);
 | 
						|
    }
 | 
						|
}
 | 
						|
#endif /* HAVE_HYPOT */
 | 
						|
 | 
						|
#ifndef HAVE_COPYSIGN
 | 
						|
double
 | 
						|
copysign(double x, double y)
 | 
						|
{
 | 
						|
    /* use atan2 to distinguish -0. from 0. */
 | 
						|
    if (y > 0. || (y == 0. && atan2(y, -1.) > 0.)) {
 | 
						|
        return fabs(x);
 | 
						|
    } else {
 | 
						|
        return -fabs(x);
 | 
						|
    }
 | 
						|
}
 | 
						|
#endif /* HAVE_COPYSIGN */
 | 
						|
 | 
						|
#ifndef HAVE_ROUND
 | 
						|
double
 | 
						|
round(double x)
 | 
						|
{
 | 
						|
    double absx, y;
 | 
						|
    absx = fabs(x);
 | 
						|
    y = floor(absx);
 | 
						|
    if (absx - y >= 0.5)
 | 
						|
    y += 1.0;
 | 
						|
    return copysign(y, x);
 | 
						|
}
 | 
						|
#endif /* HAVE_ROUND */
 |