1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hmz007 6d24f2138b
Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56)
3 years ago
..
Android.bp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CleanSpec.mk Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MD5 Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
METADATA Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MODULE_LICENSE_BSD_LIKE Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
NOTICE Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
OWNERS Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
changes Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
configure Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
configure.in Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_acos.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_acosh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_asin.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_atan2.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_atanh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_cosh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_exp.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_fmod.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_gamma.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_gamma_r.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_hypot.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_j0.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_j1.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_jn.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_lgamma.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_lgamma_r.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_log.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_log10.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_pow.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_rem_pio2.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_remainder.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_scalb.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_sinh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
e_sqrt.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
fdlibm.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
index Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
index.html Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
k_cos.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
k_rem_pio2.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
k_sin.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
k_standard.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
k_tan.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
makefile.in Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
readme Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_asinh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_atan.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_cbrt.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_ceil.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_copysign.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_cos.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_erf.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_expm1.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_fabs.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_finite.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_floor.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_frexp.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_ilogb.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_isnan.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_ldexp.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_lib_version.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_log1p.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_logb.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_matherr.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_modf.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_nextafter.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_rint.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_scalbn.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_signgam.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_significand.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_sin.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_tan.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
s_tanh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_acos.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_acosh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_asin.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_atan2.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_atanh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_cosh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_exp.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_fmod.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_gamma.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_gamma_r.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_hypot.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_j0.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_j1.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_jn.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_lgamma.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_lgamma_r.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_log.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_log10.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_pow.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_remainder.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_scalb.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_sinh.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
w_sqrt.c Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago

readme

	  *********************************
 	  * Announcing FDLIBM Version 5.3 *
	  *********************************
============================================================
			FDLIBM
============================================================
	developed at Sun Microsystems, Inc. 

What's new in FDLIBM 5.3?

CONFIGURE
	To build FDLIBM, edit the supplied Makefile or create
	a local Makefile by running "sh configure" 
	using the supplied configure script contributed by Nelson Beebe

BUGS FIXED

    1. e_pow.c incorrect results when 
	x is very close to -1.0 and y is very large, e.g.
  	pow(-1.0000000000000002e+00,4.5035996273704970e+15) = 0
  	pow(-9.9999999999999978e-01,4.5035996273704970e+15) = 0
	Correct results are close to -e and -1/e.

    2. k_tan.c error was > 1 ulp target for FDLIBM
	5.2: Worst error at least 1.45 ulp at
	tan(1.7765241907548024E+269) = 1.7733884462610958E+16
	5.3: Worst error 0.96 ulp

NOT FIXED YET

    3. Compiler failure on non-standard code
	Statements like
	            *(1+(int*)&t1) = 0;
	are not standard C and cause some optimizing compilers (e.g. GCC)
	to generate bad code under optimization.    These cases
	are to be addressed in the next release.
	
FDLIBM (Freely Distributable LIBM) is a C math library 
for machines that support IEEE 754 floating-point arithmetic. 
In this release, only double precision is supported.

FDLIBM is intended to provide a reasonably portable (see 
assumptions below), reference quality (below one ulp for
major functions like sin,cos,exp,log) math library 
(libm.a).  For a copy of FDLIBM, please see
	http://www.netlib.org/fdlibm/
or
	http://www.validlab.com/software/

--------------
1. ASSUMPTIONS
--------------
FDLIBM (double precision version) assumes:
 a.  IEEE 754 style (if not precise compliance) arithmetic;
 b.  32 bit 2's complement integer arithmetic;
 c.  Each double precision floating-point number must be in IEEE 754 
     double format, and that each number can be retrieved as two 32-bit 
     integers through the using of pointer bashing as in the example 
     below:

     Example: let y = 2.0
	double fp number y: 	2.0
	IEEE double format:	0x4000000000000000

	Referencing y as two integers:
	*(int*)&y,*(1+(int*)&y) =	{0x40000000,0x0} (on sparc)
					{0x0,0x40000000} (on 386)

	Note: Four macros are defined in fdlibm.h to handle this kind of
	retrieving:

	__HI(x)		the high part of a double x 
			(sign,exponent,the first 21 significant bits)
	__LO(x)		the least 32 significant bits of x
	__HIp(x)	same as __HI except that the argument is a pointer
			to a double
	__LOp(x)	same as __LO except that the argument is a pointer
			to a double
	
	To ensure obtaining correct ordering, one must define  __LITTLE_ENDIAN
	during compilation for little endian machine (like 386,486). The 
	default is big endian.

	If the behavior of pointer bashing is undefined, one may hack on the 
	macro in fdlibm.h.
	
  d. IEEE exceptions may trigger "signals" as is common in Unix
     implementations. 

-------------------
2. EXCEPTION CASES
-------------------
All exception cases in the FDLIBM functions will be mapped
to one of the following four exceptions:

   +-huge*huge, +-tiny*tiny,    +-1.0/0.0,	+-0.0/0.0
    (overflow)	(underflow)  (divided-by-zero) 	(invalid)

For example, ieee_log(0) is a singularity and is thus mapped to 
	-1.0/0.0 = -infinity.
That is, FDLIBM's log will compute -one/zero and return the
computed value.  On an IEEE machine, this will trigger the 
divided-by-zero exception and a negative infinity is returned by 
default.

Similarly, ieee_exp(-huge) will be mapped to tiny*tiny to generate
an underflow signal. 


--------------------------------
3. STANDARD CONFORMANCE WRAPPER 
--------------------------------
The default FDLIBM functions (compiled with -D_IEEE_LIBM flag)  
are in "IEEE spirit" (i.e., return the most reasonable result in 
floating-point arithmetic). If one wants FDLIBM to comply with
standards like SVID, X/OPEN, or POSIX/ANSI, then one can 
create a multi-standard compliant FDLIBM. In this case, each
function in FDLIBM is actually a standard compliant wrapper
function.  

File organization:
    1. For FDLIBM's kernel (internal) function,
		File name	Entry point
		---------------------------
		k_sin.c		__kernel_sin
		k_tan.c		__kernel_tan
		---------------------------
    2. For functions that have no standards conflict 
		File name	Entry point
		---------------------------
		s_sin.c		sin
		s_erf.c		erf
		---------------------------
    3. Ieee754 core functions
		File name	Entry point
		---------------------------
		e_exp.c		__ieee754_exp
		e_sinh.c	__ieee754_sinh
		---------------------------
    4. Wrapper functions
		File name	Entry point
		---------------------------
		w_exp.c		exp
		w_sinh.c	sinh
		---------------------------

Wrapper functions will twist the result of the ieee754 
function to comply to the standard specified by the value 
of _LIB_VERSION 
    if _LIB_VERSION = _IEEE_, return the ieee754 result;
    if _LIB_VERSION = _SVID_, return SVID result;
    if _LIB_VERSION = _XOPEN_, return XOPEN result;
    if _LIB_VERSION = _POSIX_, return POSIX/ANSI result.
(These are macros, see fdlibm.h for their definition.)


--------------------------------
4. HOW TO CREATE FDLIBM's libm.a
--------------------------------
There are two types of libm.a. One is IEEE only, and the other is
multi-standard compliant (supports IEEE,XOPEN,POSIX/ANSI,SVID).

To create the IEEE only libm.a, use 
	    make "CFLAGS = -D_IEEE_LIBM"	 
This will create an IEEE libm.a, which is smaller in size, and 
somewhat faster.

To create a multi-standard compliant libm, use
    make "CFLAGS = -D_IEEE_MODE"   --- multi-standard fdlibm: default
					 to IEEE
    make "CFLAGS = -D_XOPEN_MODE"  --- multi-standard fdlibm: default
					 to X/OPEN
    make "CFLAGS = -D_POSIX_MODE"  --- multi-standard fdlibm: default
					 to POSIX/ANSI
    make "CFLAGS = -D_SVID3_MODE"  --- multi-standard fdlibm: default
					 to SVID


Here is how one makes a SVID compliant libm.
    Make the library by
		make "CFLAGS = -D_SVID3_MODE".
    The libm.a of FDLIBM will be multi-standard compliant and 
    _LIB_VERSION is initialized to the value _SVID_ . 

    example1:
    ---------
	    main()
	    {
		double ieee_y0();
		printf("y0(1e300) = %1.20e\n",y0(1e300));
		exit(0);
	    }

    % cc example1.c libm.a
    % a.out
    y0: TLOSS error
    ieee_y0(1e300) = 0.00000000000000000000e+00


It is possible to change the default standard in multi-standard 
fdlibm. Here is an example of how to do it:
    example2:
    ---------
	#include "fdlibm.h"	/* must include FDLIBM's fdlibm.h */
	main()
	{
		double ieee_y0();
		_LIB_VERSION =  _IEEE_;
		printf("IEEE: ieee_y0(1e300) = %1.20e\n",y0(1e300));
		_LIB_VERSION = _XOPEN_;
		printf("XOPEN ieee_y0(1e300) = %1.20e\n",y0(1e300));
		_LIB_VERSION = _POSIX_;
		printf("POSIX ieee_y0(1e300) = %1.20e\n",y0(1e300));
		_LIB_VERSION = _SVID_;
		printf("SVID  ieee_y0(1e300) = %1.20e\n",y0(1e300));
		exit(0);
	}

    % cc example2.c libm.a
    % a.out
      IEEE: ieee_y0(1e300) = -1.36813604503424810557e-151
      XOPEN ieee_y0(1e300) = 0.00000000000000000000e+00
      POSIX ieee_y0(1e300) = 0.00000000000000000000e+00
      y0: TLOSS error
      SVID  ieee_y0(1e300) = 0.00000000000000000000e+00

Note:	Here _LIB_VERSION is a global variable. If global variables 
	are forbidden, then one should modify fdlibm.h to change
	_LIB_VERSION to be a global constant. In this case, one
	may not change the value of _LIB_VERSION as in example2.

---------------------------
5. NOTES ON PORTING FDLIBM
---------------------------
	Care must be taken when installing FDLIBM over existing
	libm.a.
	All co-existing function prototypes must agree, otherwise
	users will encounter mysterious failures.

	So far, the only known likely conflict is the declaration 
	of the IEEE recommended function scalb:

		double ieee_scalb(double,double)	(1)	SVID3 defined
		double ieee_scalb(double,int)	(2)	IBM,DEC,...

	FDLIBM follows Sun definition and use (1) as default. 
	If one's existing libm.a uses (2), then one may raise
	the flags _SCALB_INT during the compilation of FDLIBM
	to get the correct function prototype.
	(E.g., make "CFLAGS = -D_IEEE_LIBM -D_SCALB_INT".)
	NOTE that if -D_SCALB_INT is raised, it won't be SVID3
	conformant.

--------------
6. PROBLEMS ?
--------------
Please send comments and bug reports to the electronic mail address
suggested by: 
		fdlibm-comments AT sun.com