Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
106 lines
3.6 KiB
C
106 lines
3.6 KiB
C
/*-------------------------------------------------------------------------
|
|
float.h - ANSI functions forward declarations
|
|
|
|
Copyright (C) 1998, Sandeep Dutta . sandeep.dutta@usa.net
|
|
|
|
This library is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation; either version 2, or (at your option) any
|
|
later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this library; see the file COPYING. If not, write to the
|
|
Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
|
|
MA 02110-1301, USA.
|
|
|
|
As a special exception, if you link this library with other files,
|
|
some of which are compiled with SDCC, to produce an executable,
|
|
this library does not by itself cause the resulting executable to
|
|
be covered by the GNU General Public License. This exception does
|
|
not however invalidate any other reasons why the executable file
|
|
might be covered by the GNU General Public License.
|
|
-------------------------------------------------------------------------*/
|
|
|
|
#ifndef __SDC51_FLOAT_H
|
|
#define __SDC51_FLOAT_H 1
|
|
|
|
#include <limits.h>
|
|
|
|
#define FLT_RADIX 2
|
|
#define FLT_MANT_DIG 24
|
|
#define FLT_EPSILON 1.192092896E-07F
|
|
#define FLT_DIG 6
|
|
#define FLT_MIN_EXP (-125)
|
|
#define FLT_MIN 1.175494351E-38F
|
|
#define FLT_MIN_10_EXP (-37)
|
|
#define FLT_MAX_EXP (+128)
|
|
#define FLT_MAX 3.402823466E+38F
|
|
#define FLT_MAX_10_EXP (+38)
|
|
|
|
/* the following deal with IEEE single-precision numbers */
|
|
#if defined(__SDCC_FLOAT_LIB)
|
|
#define EXCESS 126
|
|
#define SIGNBIT ((unsigned long)0x80000000)
|
|
#define __INFINITY ((unsigned long)0x7F800000)
|
|
#define __NAN ((unsigned long)0xFFC00000)
|
|
#define HIDDEN (unsigned long)(1ul << 23)
|
|
#define SIGN(fp) (((unsigned long)(fp) >> (8*sizeof(fp)-1)) & 1)
|
|
#define EXP(fp) (((unsigned long)(fp) >> 23) & (unsigned int) 0x00FF)
|
|
#define MANT(fp) (((fp) & (unsigned long)0x00FFFFFF) | HIDDEN)
|
|
#define NORM 0xff000000
|
|
#define PACK(s,e,m) ((s) | ((unsigned long)(e) << 23) | (m))
|
|
#endif
|
|
|
|
float __uchar2fs (unsigned char);
|
|
float __schar2fs (signed char);
|
|
float __uint2fs (unsigned int);
|
|
float __sint2fs (signed int);
|
|
float __ulong2fs (unsigned long);
|
|
float __slong2fs (signed long);
|
|
unsigned char __fs2uchar (float);
|
|
signed char __fs2schar (float);
|
|
unsigned int __fs2uint (float);
|
|
signed int __fs2sint (float);
|
|
unsigned long __fs2ulong (float);
|
|
signed long __fs2slong (float);
|
|
|
|
float __fsadd (float, float);
|
|
float __fssub (float, float);
|
|
float __fsmul (float, float);
|
|
float __fsdiv (float, float);
|
|
|
|
_Bool __fslt (float, float);
|
|
_Bool __fseq (float, float);
|
|
_Bool __fsgt (float, float);
|
|
|
|
|
|
#if defined(__SDCC_FLOAT_LIB) && defined(__SDCC_mcs51) && !defined(__SDCC_USE_XSTACK) && !defined(_SDCC_NO_ASM_LIB_FUNCS)
|
|
|
|
#define FLOAT_ASM_MCS51
|
|
|
|
/* This adds extra code for proper round-off, in
|
|
an attempt to match the results from gcc. */
|
|
#define FLOAT_FULL_ACCURACY
|
|
|
|
/* This adds about 66 bytes to the code size and
|
|
significantly speeds up shift operations more
|
|
than 8 bits (common when subtracting numbers
|
|
of significantly different magnitude and scaling
|
|
to fixed point) */
|
|
#define FLOAT_SHIFT_SPEEDUP
|
|
|
|
#define sign_a psw.1
|
|
#define sign_b psw.5
|
|
#define exp_a dpl
|
|
#define exp_b dph
|
|
#endif /* using mcs51 assembly */
|
|
|
|
|
|
#endif /* __SDC51_FLOAT_H */
|
|
|