1 /* $NetBSD: float.h,v 1.23 2024/06/15 11:44:09 rillig Exp $ */ 2 3 #ifndef _M68K_FLOAT_H_ 4 #define _M68K_FLOAT_H_ 5 6 /* 7 * LDBL_MIN is half the x86 LDBL_MIN, even though both are 12-byte 8 * floats with the same base properties and both allegedly 9 * IEEE-compliant, because both these representations materialize the 10 * top (integer-part) bit of the mantissa. But on m68k if the exponent 11 * is 0 and the integer bit is set, it's a regular number, whereas on 12 * x86 it's called a pseudo-denormal and apparently treated as a 13 * denormal, so it doesn't count as a valid value for LDBL_MIN. 14 * 15 * x86 citation: Intel 64 and IA-32 Architectures Software Developer's 16 * Manual, vol. 1 (Order Number: 253665-077US, April 2022), Sec. 8.2.2 17 * `Unsupported Double Extended-Precision Floating-Point Encodings 18 * and Pseudo-Denormals', p. 8-14. 19 * 20 * m86k citation: MC68881/MC68882 Floating-Point Coprocessor User's 21 * Manual, Second Edition (Prentice-Hall, 1989, apparently issued by 22 * Freescale), Section 3.2 `Binary Real Data formats', pg. 3-3 bottom 23 * in particular and pp. 3-2 to 3-5 in general. 24 * 25 * If anyone needs to update this comment please make sure the copy in 26 * x86/include/float.h also gets updated. 27 */ 28 29 #if defined(__LDBL_MANT_DIG__) 30 #define LDBL_MANT_DIG __LDBL_MANT_DIG__ 31 #define LDBL_EPSILON __LDBL_EPSILON__ 32 #define LDBL_DIG __LDBL_DIG__ 33 #define LDBL_MIN_EXP __LDBL_MIN_EXP__ 34 #define LDBL_MIN __LDBL_MIN__ 35 #define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ 36 #define LDBL_MAX_EXP __LDBL_MAX_EXP__ 37 #define LDBL_MAX __LDBL_MAX__ 38 #define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ 39 #elif !defined(__mc68010__) && !defined(__mcoldfire__) 40 #define LDBL_MANT_DIG 64 41 #define LDBL_EPSILON 1.0842021724855044340E-19L 42 #define LDBL_DIG 18 43 #define LDBL_MIN_EXP (-16381) 44 #define LDBL_MIN 1.6810515715560467531E-4932L 45 #define LDBL_MIN_10_EXP (-4931) 46 #define LDBL_MAX_EXP 16384 47 #define LDBL_MAX 1.1897314953572317650E+4932L 48 #define LDBL_MAX_10_EXP 4932 49 #endif 50 51 #include <sys/float_ieee754.h> 52 53 #if !defined(__mc68010__) && !defined(__mcoldfire__) 54 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \ 55 !defined(_XOPEN_SOURCE) || \ 56 ((__STDC_VERSION__ - 0) >= 199901L) || \ 57 ((_POSIX_C_SOURCE - 0) >= 200112L) || \ 58 ((_XOPEN_SOURCE - 0) >= 600) || \ 59 defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE) 60 #define DECIMAL_DIG 21 61 #endif /* !defined(_ANSI_SOURCE) && ... */ 62 #endif /* !__mc68010__ && !__mcoldfire__ */ 63 64 #endif /* !_M68K_FLOAT_H_ */ 65