mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
c.lib 1.169 (8.8.2004)
- Since the 'long double' data type is not really supported by the GCC versions we use (and not supported by SAS/C either) building the library with support code for it is now a configurable option. Unless enabled, 'long double' is now treated like 'double'. - Reworked the HUGE_VAL definition which previously would default to Infinity. The new code properly defines this to the largest representable floating point number. The 'great' thing about the HUGE_VAL definition in this library is that it's a reference to a binary constant initialized by the library startup code. So any application checking for HUGE_VAL merely needs to be relinked rather than recompiled. git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14703 87f5fb63-7c3d-0410-a384-fd976d0f7a62
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "amiga.lib 1.168"
|
||||
#define VSTRING "amiga.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "amiga.lib 1.169"
|
||||
#define VSTRING "amiga.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "c.lib 1.168"
|
||||
#define VSTRING "c.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "c.lib 1.169"
|
||||
#define VSTRING "c.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "debug.lib 1.168"
|
||||
#define VSTRING "debug.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "debug.lib 1.169"
|
||||
#define VSTRING "debug.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "m.lib 1.168"
|
||||
#define VSTRING "m.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "m.lib 1.169"
|
||||
#define VSTRING "m.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "m881.lib 1.168"
|
||||
#define VSTRING "m881.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "m881.lib 1.169"
|
||||
#define VSTRING "m881.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_fp_support.h,v 1.1.1.1 2004-07-26 16:30:44 obarthel Exp $
|
||||
* $Id: math_fp_support.h,v 1.2 2004-08-08 10:55:57 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -36,9 +36,47 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* If any of the three supported floating point support flavours is
|
||||
enabled, make sure that the generic 'FLOATING_POINT_SUPPORT' symbol
|
||||
is defined, too.*/
|
||||
#if (defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT) || defined(PPC_FLOATING_POINT_SUPPORT))
|
||||
#define FLOATING_POINT_SUPPORT
|
||||
#endif
|
||||
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT || PPC_FLOATING_POINT_SUPPORT */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* This selects whether or not the 'long double' type should be used. So far,
|
||||
only 'double' can be supported, and 'long double' defaults to 'double'. */
|
||||
/*#define USE_LONG_DOUBLE*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(USE_LONG_DOUBLE)
|
||||
typedef long double __long_double_t;
|
||||
#else
|
||||
typedef double __long_double_t;
|
||||
#endif /* USE_LONG_DOUBLE */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* 'Portable' raw representations of three IEEE floating point formats. */
|
||||
union ieee_long_double
|
||||
{
|
||||
long double value;
|
||||
unsigned long raw[3];
|
||||
};
|
||||
|
||||
union ieee_double
|
||||
{
|
||||
double value;
|
||||
unsigned long raw[2];
|
||||
};
|
||||
|
||||
union ieee_single
|
||||
{
|
||||
float value;
|
||||
unsigned long raw[1];
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_init_exit.c,v 1.1.1.1 2004-07-26 16:30:46 obarthel Exp $
|
||||
* $Id: math_init_exit.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -121,41 +121,45 @@ __math_init(void)
|
||||
#endif /* IEEE_FLOATING_POINT_SUPPORT */
|
||||
|
||||
/* Now fill in the HUGE_VAL constant, which is set to
|
||||
* +Infinity.
|
||||
*/
|
||||
the largest representable floating point value. */
|
||||
if(sizeof(__huge_val) == 4) /* single precision */
|
||||
{
|
||||
static const unsigned long infinity[] =
|
||||
static const unsigned long largest_fp_value[1] =
|
||||
{
|
||||
0x7F800000
|
||||
/* Exponent = +126, Mantissa = 8,388,607 */
|
||||
0x7f7fffff
|
||||
};
|
||||
|
||||
assert( sizeof(infinity) == sizeof(__huge_val) );
|
||||
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
|
||||
|
||||
memmove((void *)&__huge_val,infinity,sizeof(infinity));
|
||||
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
|
||||
}
|
||||
else if (sizeof(__huge_val) == 8) /* double precision */
|
||||
{
|
||||
static const unsigned long infinity[] =
|
||||
static const unsigned long largest_fp_value[2] =
|
||||
{
|
||||
0x7FF00000,0x00000000
|
||||
/* Exponent = +1022, Mantissa = 4,503,599,627,370,495 */
|
||||
0x7fefffff,0xffffffff
|
||||
};
|
||||
|
||||
assert( sizeof(infinity) == sizeof(__huge_val) );
|
||||
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
|
||||
|
||||
memmove((void *)&__huge_val,infinity,sizeof(infinity));
|
||||
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
|
||||
}
|
||||
#if defined(USE_LONG_DOUBLE)
|
||||
else if (sizeof(__huge_val) == 12) /* extended precision */
|
||||
{
|
||||
static const unsigned long infinity[] =
|
||||
static const unsigned long largest_fp_value[3] =
|
||||
{
|
||||
0x7FFF0000,0x00000000,0x00000000
|
||||
/* Exponent = +32766, Mantissa = 18,446,744,073,709,551,615 */
|
||||
0x7ffe0000,0xffffffff,0xffffffff
|
||||
};
|
||||
|
||||
assert( sizeof(infinity) == sizeof(__huge_val) );
|
||||
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
|
||||
|
||||
memmove((void *)&__huge_val,infinity,sizeof(infinity));
|
||||
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
|
||||
}
|
||||
#endif /* USE_LONG_DOUBLE */
|
||||
|
||||
result = OK;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_isinf.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
|
||||
* $Id: math_isinf.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -45,26 +45,6 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
union ieee_long_double
|
||||
{
|
||||
long double value;
|
||||
unsigned long raw[3];
|
||||
};
|
||||
|
||||
union ieee_double
|
||||
{
|
||||
double value;
|
||||
unsigned long raw[2];
|
||||
};
|
||||
|
||||
union ieee_single
|
||||
{
|
||||
float value;
|
||||
unsigned long raw[1];
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
isinf(double number)
|
||||
{
|
||||
@ -93,6 +73,7 @@ isinf(double number)
|
||||
/* Exponent = 2047 and fraction = 0.0 */
|
||||
is_infinity = (((x.raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (x.raw[1] == 0));
|
||||
}
|
||||
#if defined(USE_LONG_DOUBLE)
|
||||
else if (sizeof(number) == 12) /* extended precision */
|
||||
{
|
||||
union ieee_long_double x;
|
||||
@ -102,6 +83,7 @@ isinf(double number)
|
||||
/* Exponent = 32767 and fraction = 0.0 */
|
||||
is_infinity = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && (x.raw[1] & 0x7FFFFFFF) == 0 && (x.raw[2] == 0));
|
||||
}
|
||||
#endif /* USE_LONG_DOUBLE */
|
||||
else
|
||||
{
|
||||
/* Can't happen */
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_isnan.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
|
||||
* $Id: math_isnan.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -45,26 +45,6 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
union ieee_long_double
|
||||
{
|
||||
long double value;
|
||||
unsigned long raw[3];
|
||||
};
|
||||
|
||||
union ieee_double
|
||||
{
|
||||
double value;
|
||||
unsigned long raw[2];
|
||||
};
|
||||
|
||||
union ieee_single
|
||||
{
|
||||
float value;
|
||||
unsigned long raw[1];
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
isnan(double number)
|
||||
{
|
||||
@ -92,15 +72,17 @@ isnan(double number)
|
||||
/* Exponent = 2047 and fraction != 0.0 */
|
||||
result = (((x.raw[0] & 0x7FF00000) == 0x7FF00000) && ((x.raw[0] & 0x000FFFFF) != 0 || (x.raw[1] != 0)));
|
||||
}
|
||||
#if defined(USE_LONG_DOUBLE)
|
||||
else if (sizeof(number) == 12) /* extended precision */
|
||||
{
|
||||
union ieee_long_double x;
|
||||
|
||||
x.value = number;
|
||||
|
||||
/* Exponent = 32767 and fraction != 0.0 */
|
||||
/* Exponent = 32766 and fraction != 0.0 */
|
||||
result = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && ((x.raw[1] & 0x7FFFFFFF) != 0 || x.raw[2] != 0));
|
||||
}
|
||||
#endif /* USE_LONG_DOUBLE */
|
||||
else
|
||||
{
|
||||
/* Can't happen */
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "net.lib 1.168"
|
||||
#define VSTRING "net.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "net.lib 1.169"
|
||||
#define VSTRING "net.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
@ -1,3 +1,19 @@
|
||||
c.lib 1.169 (8.8.2004)
|
||||
|
||||
- Since the 'long double' data type is not really supported by the GCC
|
||||
versions we use (and not supported by SAS/C either) building the
|
||||
library with support code for it is now a configurable option. Unless
|
||||
enabled, 'long double' is now treated like 'double'.
|
||||
|
||||
- Reworked the HUGE_VAL definition which previously would default to
|
||||
Infinity. The new code properly defines this to the largest
|
||||
representable floating point number. The 'great' thing about the
|
||||
HUGE_VAL definition in this library is that it's a reference to
|
||||
a binary constant initialized by the library startup code. So any
|
||||
application checking for HUGE_VAL merely needs to be relinked
|
||||
rather than recompiled.
|
||||
|
||||
|
||||
c.lib 1.168 (7.8.2004)
|
||||
|
||||
- Ditched __is_infinity() and __is_not_a_number(), brought them back
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "stack.lib 1.168"
|
||||
#define VSTRING "stack.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: stack.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "stack.lib 1.169"
|
||||
#define VSTRING "stack.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: stack.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio_protos.h,v 1.1.1.1 2004-07-26 16:31:39 obarthel Exp $
|
||||
* $Id: stdio_protos.h,v 1.2 2004-08-08 10:55:57 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -200,22 +200,4 @@ extern void __duplicate_fd(struct fd * duplicate_fd,struct fd * original_fd);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(FLOATING_POINT_SUPPORT)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* stdio_isnotanumber.c */
|
||||
extern int __is_not_a_number(long double number);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* stdio_isinfinity.c */
|
||||
extern int __is_infinity(long double number);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* FLOATING_POINT_SUPPORT */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _STDIO_PROTOS_H */
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio_vfprintf.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
|
||||
* $Id: stdio_vfprintf.c,v 1.3 2004-08-08 10:55:57 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -72,7 +72,7 @@
|
||||
/****************************************************************************/
|
||||
|
||||
static int
|
||||
get_num_leading_digits(long double v)
|
||||
get_num_leading_digits(__long_double_t v)
|
||||
{
|
||||
int num_digits;
|
||||
|
||||
@ -634,14 +634,14 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
||||
const char * buffer_stop = &buffer[sizeof(buffer)-1];
|
||||
char * buffer_start = buffer;
|
||||
|
||||
long double v;
|
||||
__long_double_t v;
|
||||
|
||||
output_buffer = buffer_start;
|
||||
|
||||
D(("sizeof(long double) == %ld",sizeof(v)));
|
||||
|
||||
if(parameter_size == parameter_size_long_double)
|
||||
v = va_arg(arg, long double);
|
||||
v = va_arg(arg, __long_double_t);
|
||||
else
|
||||
v = va_arg(arg, double);
|
||||
|
||||
@ -676,7 +676,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
||||
else
|
||||
{
|
||||
BOOL strip_trailing_zeroes = FALSE;
|
||||
long double roundoff_fudge = 0.0;
|
||||
__long_double_t roundoff_fudge = 0.0;
|
||||
int max_digits = -1;
|
||||
int exponent = 0;
|
||||
int digit;
|
||||
@ -713,7 +713,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
||||
/* Figure out whether 'e' or 'f' format should be used. */
|
||||
if(conversion_type == 'g' || conversion_type == 'e')
|
||||
{
|
||||
long double local_v = v;
|
||||
__long_double_t local_v = v;
|
||||
int local_exponent = 0;
|
||||
|
||||
/* Put one single digit in front of the decimal point. */
|
||||
@ -978,7 +978,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
||||
/* Remove the parameter from the argument vector and
|
||||
don't produce any output. */
|
||||
if(parameter_size == parameter_size_long_double)
|
||||
(void)va_arg(arg, long double);
|
||||
(void)va_arg(arg, __long_double_t);
|
||||
else
|
||||
(void)va_arg(arg, double);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio_vfscanf.c,v 1.1.1.1 2004-07-26 16:31:48 obarthel Exp $
|
||||
* $Id: stdio_vfscanf.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -456,8 +456,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
||||
{
|
||||
#if defined(FLOATING_POINT_SUPPORT)
|
||||
{
|
||||
long double sum = 0.0;
|
||||
long double new_sum;
|
||||
__long_double_t sum = 0.0;
|
||||
__long_double_t new_sum;
|
||||
BOOL is_negative = FALSE;
|
||||
BOOL decimal_point_matches = FALSE;
|
||||
BOOL have_exponent = FALSE;
|
||||
@ -495,7 +495,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
||||
{
|
||||
SHOWMSG("extended format (long double)");
|
||||
|
||||
next_parameter = va_arg(arg,long double *);
|
||||
next_parameter = va_arg(arg,__long_double_t *);
|
||||
}
|
||||
|
||||
assert( next_parameter != NULL );
|
||||
@ -520,7 +520,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
||||
}
|
||||
else
|
||||
{
|
||||
*((long double *)next_parameter) = 0;
|
||||
*((__long_double_t *)next_parameter) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -869,7 +869,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
||||
}
|
||||
else
|
||||
{
|
||||
*((long double *)next_parameter) = sum;
|
||||
*((__long_double_t *)next_parameter) = sum;
|
||||
}
|
||||
|
||||
num_assignments++;
|
||||
@ -912,7 +912,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
||||
{
|
||||
SHOWMSG("extended format (long double)");
|
||||
|
||||
next_parameter = va_arg(arg,long double *);
|
||||
next_parameter = va_arg(arg,__long_double_t *);
|
||||
}
|
||||
|
||||
assert( next_parameter != NULL );
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 168
|
||||
#define DATE "7.8.2004"
|
||||
#define VERS "unix.lib 1.168"
|
||||
#define VSTRING "unix.lib 1.168 (7.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: unix.lib 1.168 (7.8.2004)"
|
||||
#define REVISION 169
|
||||
#define DATE "8.8.2004"
|
||||
#define VERS "unix.lib 1.169"
|
||||
#define VSTRING "unix.lib 1.169 (8.8.2004)\r\n"
|
||||
#define VERSTAG "\0$VER: unix.lib 1.169 (8.8.2004)"
|
||||
|
||||
@ -1 +1 @@
|
||||
168
|
||||
169
|
||||
|
||||
Reference in New Issue
Block a user