mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* missing/erf.c: need to include some headers for some platforms.
* win32/win32.h (copysign, scalb): define for compatibility with other platforms. [ruby-dev:26430] * missing/crypt.c: modified to make it compilable on platforms other than BSD. [ruby-dev:26430] * missing/erf.c: ditto. code from <exp.c> merged. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8692 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									f2a501261f
								
							
						
					
					
						commit
						32d0d609e9
					
				
					 5 changed files with 142 additions and 9 deletions
				
			
		
							
								
								
									
										14
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,17 @@
 | 
			
		|||
Fri Jul  1 15:50:12 2005  NAKAMURA Usaku  <usa@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* missing/erf.c: need to include some headers for some platforms.
 | 
			
		||||
 | 
			
		||||
	* win32/win32.h (copysign, scalb): define for compatibility with
 | 
			
		||||
	  other platforms. [ruby-dev:26430]
 | 
			
		||||
 | 
			
		||||
Fri Jul  1 15:37:42 2005  Yukihiro Matsumoto  <matz@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* missing/crypt.c: modified to make it compilable on platforms
 | 
			
		||||
	  other than BSD.  [ruby-dev:26430]
 | 
			
		||||
 | 
			
		||||
	* missing/erf.c: ditto.  code from <exp.c> merged.
 | 
			
		||||
 | 
			
		||||
Fri Jul  1 12:44:56 2005  Tanaka Akira  <akr@m17n.org>
 | 
			
		||||
 | 
			
		||||
	* lib/open-uri.rb (OpenURI.open_http): refine post_connection_check 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										10
									
								
								LEGAL
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								LEGAL
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -134,14 +134,12 @@ st.[ch]:
 | 
			
		|||
x68/*:
 | 
			
		||||
missing/alloca.c:
 | 
			
		||||
missing/dup2.c:
 | 
			
		||||
missing/erf.c:
 | 
			
		||||
missing/finite.c:
 | 
			
		||||
missing/hypot.c:
 | 
			
		||||
missing/isinf.c:
 | 
			
		||||
missing/isnan.c:
 | 
			
		||||
missing/memcmp.c:
 | 
			
		||||
missing/memmove.c:
 | 
			
		||||
missing/mkdir.c:
 | 
			
		||||
missing/strcasecmp.c:
 | 
			
		||||
missing/strchr.c:
 | 
			
		||||
missing/streror.c:
 | 
			
		||||
| 
						 | 
				
			
			@ -186,6 +184,8 @@ missing/strtoul.c:
 | 
			
		|||
    software for any purpose.  It is provided "as is" without
 | 
			
		||||
    express or implied warranty.
 | 
			
		||||
 | 
			
		||||
missing/erf.c:
 | 
			
		||||
missing/crypt.c:
 | 
			
		||||
missing/vsnprintf.c:
 | 
			
		||||
 | 
			
		||||
  This file is under the old-style BSD license.  Note that the
 | 
			
		||||
| 
						 | 
				
			
			@ -205,11 +205,7 @@ missing/vsnprintf.c:
 | 
			
		|||
    2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
       documentation and/or other materials provided with the distribution.
 | 
			
		||||
    3. All advertising materials mentioning features or use of this software
 | 
			
		||||
       must display the following acknowledgement:
 | 
			
		||||
         This product includes software developed by the University of
 | 
			
		||||
         California, Berkeley and its contributors.
 | 
			
		||||
    4. Neither the name of the University nor the names of its contributors
 | 
			
		||||
    3. Neither the name of the University nor the names of its contributors
 | 
			
		||||
       may be used to endorse or promote products derived from this software
 | 
			
		||||
       without specific prior written permission.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,9 +34,17 @@
 | 
			
		|||
static char sccsid[] = "@(#)crypt.c	8.1 (Berkeley) 6/4/93";
 | 
			
		||||
#endif /* LIBC_SCCS and not lint */
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#ifdef HAVE_PWD_H
 | 
			
		||||
#include <pwd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#ifndef _PASSWORD_EFMT1
 | 
			
		||||
#define _PASSWORD_EFMT1 '_'
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * UNIX password, and DES, encryption.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										113
									
								
								missing/erf.c
									
										
									
									
									
								
							
							
						
						
									
										113
									
								
								missing/erf.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -31,6 +31,115 @@
 | 
			
		|||
static char sccsid[] = "@(#)erf.c	8.1 (Berkeley) 6/4/93";
 | 
			
		||||
#endif /* not lint */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#include "defines.h"
 | 
			
		||||
 | 
			
		||||
#if defined(vax)||defined(tahoe)
 | 
			
		||||
 | 
			
		||||
/* Deal with different ways to concatenate in cpp */
 | 
			
		||||
#  ifdef __STDC__
 | 
			
		||||
#    define	cat3(a,b,c) a ## b ## c
 | 
			
		||||
#  else
 | 
			
		||||
#    define	cat3(a,b,c) a/**/b/**/c
 | 
			
		||||
#  endif
 | 
			
		||||
 | 
			
		||||
/* Deal with vax/tahoe byte order issues */
 | 
			
		||||
#  ifdef vax
 | 
			
		||||
#    define	cat3t(a,b,c) cat3(a,b,c)
 | 
			
		||||
#  else
 | 
			
		||||
#    define	cat3t(a,b,c) cat3(a,c,b)
 | 
			
		||||
#  endif
 | 
			
		||||
 | 
			
		||||
#  define vccast(name) (*(const double *)(cat3(name,,x)))
 | 
			
		||||
 | 
			
		||||
   /*
 | 
			
		||||
    * Define a constant to high precision on a Vax or Tahoe.
 | 
			
		||||
    *
 | 
			
		||||
    * Args are the name to define, the decimal floating point value,
 | 
			
		||||
    * four 16-bit chunks of the float value in hex
 | 
			
		||||
    * (because the vax and tahoe differ in float format!), the power
 | 
			
		||||
    * of 2 of the hex-float exponent, and the hex-float mantissa.
 | 
			
		||||
    * Most of these arguments are not used at compile time; they are
 | 
			
		||||
    * used in a post-check to make sure the constants were compiled
 | 
			
		||||
    * correctly.
 | 
			
		||||
    *
 | 
			
		||||
    * People who want to use the constant will have to do their own
 | 
			
		||||
    *     #define foo vccast(foo)
 | 
			
		||||
    * since CPP cannot do this for them from inside another macro (sigh).
 | 
			
		||||
    * We define "vccast" if this needs doing.
 | 
			
		||||
    */
 | 
			
		||||
#  define vc(name, value, x1,x2,x3,x4, bexp, xval) \
 | 
			
		||||
	const static long cat3(name,,x)[] = {cat3t(0x,x1,x2), cat3t(0x,x3,x4)};
 | 
			
		||||
 | 
			
		||||
#  define ic(name, value, bexp, xval) ;
 | 
			
		||||
 | 
			
		||||
#else	/* vax or tahoe */
 | 
			
		||||
 | 
			
		||||
   /* Hooray, we have an IEEE machine */
 | 
			
		||||
#  undef vccast
 | 
			
		||||
#  define vc(name, value, x1,x2,x3,x4, bexp, xval) ;
 | 
			
		||||
 | 
			
		||||
#  define ic(name, value, bexp, xval) \
 | 
			
		||||
	const static double name = value;
 | 
			
		||||
 | 
			
		||||
#endif	/* defined(vax)||defined(tahoe) */
 | 
			
		||||
 | 
			
		||||
const static double ln2hi = 6.9314718055829871446E-1;
 | 
			
		||||
const static double ln2lo = 1.6465949582897081279E-12;
 | 
			
		||||
const static double lnhuge = 9.4961163736712506989E1;
 | 
			
		||||
const static double lntiny = -9.5654310917272452386E1;
 | 
			
		||||
const static double invln2 = 1.4426950408889634148E0;
 | 
			
		||||
const static double ep1 = 1.6666666666666601904E-1;
 | 
			
		||||
const static double ep2 = -2.7777777777015593384E-3;
 | 
			
		||||
const static double ep3 = 6.6137563214379343612E-5;
 | 
			
		||||
const static double ep4 = -1.6533902205465251539E-6;
 | 
			
		||||
const static double ep5 = 4.1381367970572384604E-8;
 | 
			
		||||
 | 
			
		||||
/* returns exp(r = x + c) for |c| < |x| with no overlap.  */
 | 
			
		||||
double __exp__D(x, c)
 | 
			
		||||
double x, c;
 | 
			
		||||
{
 | 
			
		||||
	double  z,hi,lo, t;
 | 
			
		||||
	int k;
 | 
			
		||||
 | 
			
		||||
#if !defined(vax)&&!defined(tahoe)
 | 
			
		||||
	if (x!=x) return(x);	/* x is NaN */
 | 
			
		||||
#endif	/* !defined(vax)&&!defined(tahoe) */
 | 
			
		||||
	if ( x <= lnhuge ) {
 | 
			
		||||
		if ( x >= lntiny ) {
 | 
			
		||||
 | 
			
		||||
		    /* argument reduction : x --> x - k*ln2 */
 | 
			
		||||
			z = invln2*x;
 | 
			
		||||
			k = z + copysign(.5, x);
 | 
			
		||||
 | 
			
		||||
		    /* express (x+c)-k*ln2 as hi-lo and let x=hi-lo rounded */
 | 
			
		||||
 | 
			
		||||
			hi=(x-k*ln2hi);			/* Exact. */
 | 
			
		||||
			x= hi - (lo = k*ln2lo-c);
 | 
			
		||||
		    /* return 2^k*[1+x+x*c/(2+c)]  */
 | 
			
		||||
			z=x*x;
 | 
			
		||||
			c= x - z*(ep1+z*(ep2+z*(ep3+z*(ep4+z*ep5))));
 | 
			
		||||
			c = (x*c)/(2.0-c);
 | 
			
		||||
 | 
			
		||||
			return  scalb(1.+(hi-(lo - c)), k);
 | 
			
		||||
		}
 | 
			
		||||
		/* end of x > lntiny */
 | 
			
		||||
 | 
			
		||||
		else 
 | 
			
		||||
		     /* exp(-big#) underflows to zero */
 | 
			
		||||
		     if(finite(x))  return(scalb(1.0,-5000));
 | 
			
		||||
 | 
			
		||||
		     /* exp(-INF) is zero */
 | 
			
		||||
		     else return(0.0);
 | 
			
		||||
	}
 | 
			
		||||
	/* end of x < lnhuge */
 | 
			
		||||
 | 
			
		||||
	else 
 | 
			
		||||
	/* exp(INF) is INF, exp(+big#) overflows to INF */
 | 
			
		||||
	    return( finite(x) ?  scalb(1.0,5000)  : x);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Modified Nov 30, 1992 P. McILROY:
 | 
			
		||||
 *	Replaced expansions for x >= 1.25 (error 1.7ulp vs ~6ulp)
 | 
			
		||||
 * Replaced even+odd with direct calculation for x < .84375,
 | 
			
		||||
| 
						 | 
				
			
			@ -155,7 +264,7 @@ static char sccsid[] = "@(#)erf.c	8.1 (Berkeley) 6/4/93";
 | 
			
		|||
#include "ieee_libm.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static double
 | 
			
		||||
const static double
 | 
			
		||||
tiny	    = 1e-300,
 | 
			
		||||
half	    = 0.5,
 | 
			
		||||
one	    = 1.0,
 | 
			
		||||
| 
						 | 
				
			
			@ -318,7 +427,7 @@ double erf(x)
 | 
			
		|||
double erfc(x) 
 | 
			
		||||
	double x;
 | 
			
		||||
{
 | 
			
		||||
	double R,S,P,Q,s,ax,y,z,r,fabs(),__exp__D();
 | 
			
		||||
	double R,S,P,Q,s,ax,y,z,r,fabs();
 | 
			
		||||
	if (!finite(x)) {
 | 
			
		||||
		if (isnan(x))		/* erfc(NaN) = NaN */
 | 
			
		||||
			return(x);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -209,6 +209,12 @@ extern FILE *rb_w32_fsopen(const char *, const char *, int);
 | 
			
		|||
#ifndef finite
 | 
			
		||||
#define finite(x) _finite(x)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef copysign
 | 
			
		||||
#define copysign(a, b) _copysign(a, b)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef scalb
 | 
			
		||||
#define scalb(a, b) _scalb(a, b)
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue