166458Sdfr/* $FreeBSD$ */
266458Sdfr/* From: NetBSD: float.h,v 1.6 1997/07/17 21:36:03 thorpej Exp */
366458Sdfr
4139790Simp/*-
566458Sdfr * Copyright (c) 1989, 1993
666458Sdfr *	The Regents of the University of California.  All rights reserved.
766458Sdfr *
866458Sdfr * Redistribution and use in source and binary forms, with or without
966458Sdfr * modification, are permitted provided that the following conditions
1066458Sdfr * are met:
1166458Sdfr * 1. Redistributions of source code must retain the above copyright
1266458Sdfr *    notice, this list of conditions and the following disclaimer.
1366458Sdfr * 2. Redistributions in binary form must reproduce the above copyright
1466458Sdfr *    notice, this list of conditions and the following disclaimer in the
1566458Sdfr *    documentation and/or other materials provided with the distribution.
1666458Sdfr * 4. Neither the name of the University nor the names of its contributors
1766458Sdfr *    may be used to endorse or promote products derived from this software
1866458Sdfr *    without specific prior written permission.
1966458Sdfr *
2066458Sdfr * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2166458Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2266458Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2366458Sdfr * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2466458Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2566458Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2666458Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2766458Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2866458Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2966458Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3066458Sdfr * SUCH DAMAGE.
3166458Sdfr */
3266458Sdfr
3366458Sdfr#ifndef _MACHINE_FLOAT_H_
3466458Sdfr#define _MACHINE_FLOAT_H_
3566458Sdfr
3666458Sdfr#include <sys/cdefs.h>
3766458Sdfr
38132383Sdas__BEGIN_DECLS
39132383Sdasextern int __flt_rounds(void);
40132383Sdas__END_DECLS
41132383Sdas
4266458Sdfr#define FLT_RADIX	2		/* b */
43132383Sdas#define FLT_ROUNDS	__flt_rounds()
44128629Sdas#if __ISO_C_VISIBLE >= 1999
45110566Smike#define	FLT_EVAL_METHOD	0		/* no promotions */
46217180Sdas#define	DECIMAL_DIG	21		/* max precision in decimal digits */
47128629Sdas#endif
4866458Sdfr
4966458Sdfr#define FLT_MANT_DIG	24		/* p */
5066458Sdfr#define FLT_EPSILON	1.19209290E-07F	/* b**(1-p) */
5166458Sdfr#define FLT_DIG		6		/* floor((p-1)*log10(b))+(b == 10) */
52230366Sdas#define FLT_MIN_EXP	(-125)		/* emin */
5366458Sdfr#define FLT_MIN		1.17549435E-38F	/* b**(emin-1) */
54230366Sdas#define FLT_MIN_10_EXP	(-37)		/* ceil(log10(b**(emin-1))) */
5566458Sdfr#define FLT_MAX_EXP	128		/* emax */
5666458Sdfr#define FLT_MAX		3.40282347E+38F	/* (1-b**(-p))*b**emax */
5766458Sdfr#define FLT_MAX_10_EXP	38		/* floor(log10((1-b**(-p))*b**emax)) */
58230475Sdas#if __ISO_C_VISIBLE >= 2011
59230475Sdas#define	FLT_TRUE_MIN	1.40129846E-45F	/* b**(emin-p) */
60230475Sdas#define	FLT_DECIMAL_DIG	9		/* ceil(1+p*log10(b)) */
61230475Sdas#define	FLT_HAS_SUBNORM	1
62230475Sdas#endif /* __ISO_C_VISIBLE >= 2011 */
6366458Sdfr
6466458Sdfr#define DBL_MANT_DIG	53
6566458Sdfr#define DBL_EPSILON	2.2204460492503131E-16
6666458Sdfr#define DBL_DIG		15
67230366Sdas#define DBL_MIN_EXP	(-1021)
6866458Sdfr#define DBL_MIN		2.2250738585072014E-308
69230366Sdas#define DBL_MIN_10_EXP	(-307)
7066458Sdfr#define DBL_MAX_EXP	1024
7166458Sdfr#define DBL_MAX		1.7976931348623157E+308
7266458Sdfr#define DBL_MAX_10_EXP	308
73230475Sdas#if __ISO_C_VISIBLE >= 2011
74230475Sdas#define	DBL_TRUE_MIN	4.9406564584124654E-324
75230475Sdas#define	DBL_DECIMAL_DIG	17
76230475Sdas#define	DBL_HAS_SUBNORM	1
77230475Sdas#endif /* __ISO_C_VISIBLE >= 2011 */
7866458Sdfr
79112721Sdas#define LDBL_MANT_DIG	64
80112721Sdas#define LDBL_EPSILON	1.0842021724855044340E-19L
81112721Sdas#define LDBL_DIG	18
82112721Sdas#define LDBL_MIN_EXP	(-16381)
83112721Sdas#define LDBL_MIN	3.3621031431120935063E-4932L
84112721Sdas#define LDBL_MIN_10_EXP	(-4931)
85112721Sdas#define LDBL_MAX_EXP	16384
86112721Sdas#define LDBL_MAX	1.1897314953572317650E+4932L
87112721Sdas#define LDBL_MAX_10_EXP	4932
88230475Sdas#if __ISO_C_VISIBLE >= 2011
89230475Sdas#define	LDBL_TRUE_MIN	3.6451995318824746025E-4951L
90230475Sdas#define	LDBL_DECIMAL_DIG 21
91230475Sdas#define	LDBL_HAS_SUBNORM 1
92230475Sdas#endif /* __ISO_C_VISIBLE >= 2011 */
9366458Sdfr
9466458Sdfr#endif	/* _MACHINE_FLOAT_H_ */
95