⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 float

📁 su 的源代码库
💻
字号:
hdr	float,limits,math,valueslib	frexp,frexpl,ldexp,ldexpltst	_ast_mpy_overflow_fpe note{ fpe on mpy overflow }end noexecute{	main()	{		float	f;		float	p;		p = f = 1.0;		do		{			p = f;			f *= 2.0;		} while (f != p);		return 0;	}}endtst	_ast_div_underflow_fpe note{ fpe on div underflow }end noexecute{	main()	{		float	f;		float	p;		p = f = 1.0;		do		{			p = f;			f /= 2.0;		} while (f != p);		return 0;	}}endmacro{	#if _hdr_float	#include <float.h>	#endif	#if _hdr_limits	#include <limits.h>	#endif	#if _hdr_math	#include <math.h>	#endif	#if _hdr_values	#include <values.h>	#endif	#if !defined(FLT_MIN_EXP) && defined(FMINEXP)	#define FLT_MIN_EXP	FMINEXP	#endif	#if !defined(FLT_MIN) && defined(MINFLOAT)	#define FLT_MIN		MINFLOAT	#endif	#if !defined(FLT_MAX_EXP) && defined(FMAXEXP)	#define FLT_MAX_EXP	FMAXEXP	#endif	#if !defined(FLT_MAX) && defined(MAXFLOAT)	#define FLT_MAX		MAXFLOAT	#endif	#if !defined(DBL_MIN_EXP) && defined(DMINEXP)	#define DBL_MIN_EXP	DMINEXP	#endif	#if !defined(DBL_MIN) && defined(MINDOUBLE)	#define DBL_MIN		MINDOUBLE	#endif	#if !defined(DBL_MAX_EXP) && defined(DMAXEXP)	#define DBL_MAX_EXP	DMAXEXP	#endif	#if !defined(DBL_MAX) && defined(MAXDOUBLE)	#define DBL_MAX		MAXDOUBLE	#endif	#if _hdr_float	<<"#include <float.h>">>	#endif	#if _hdr_math	<<"#include <math.h>">>	#endif	#ifdef FLT_DIG	<<"#ifndef FLT_DIG">>	<<"#define FLT_DIG">>		FLT_DIG	<<"#endif">>	#endif	#ifdef FLT_MAX	<<"#ifndef FLT_MAX">>	<<"#define FLT_MAX">>		FLT_MAX	<<"#endif">>	#endif	#ifdef FLT_MAX_10_EXP	<<"#ifndef FLT_MAX_10_EXP">>	<<"#define FLT_MAX_10_EXP">>	FLT_MAX_10_EXP	<<"#endif">>	#endif	#ifdef FLT_MAX_EXP	<<"#ifndef FLT_MAX_EXP">>	<<"#define FLT_MAX_EXP">>	FLT_MAX_EXP	<<"#endif">>	#endif	#ifdef FLT_MIN	<<"#ifndef FLT_MIN">>	<<"#define FLT_MIN">>		FLT_MIN	<<"#endif">>	#endif	#ifdef FLT_MIN_10_EXP	<<"#ifndef FLT_MIN_10_EXP">>	<<"#define FLT_MIN_10_EXP">>	FLT_MIN_10_EXP	<<"#endif">>	#endif	#ifdef FLT_MIN_EXP	<<"#ifndef FLT_MIN_EXP">>	<<"#define FLT_MIN_EXP">>	FLT_MIN_EXP	<<"#endif">>	#endif	#ifdef DBL_DIG	<<"#ifndef DBL_DIG">>	<<"#define DBL_DIG">>		DBL_DIG	<<"#endif">>	#endif	#ifdef DBL_MAX	<<"#ifndef DBL_MAX">>	<<"#define DBL_MAX">>		DBL_MAX	<<"#endif">>	#endif	#ifdef DBL_MAX_10_EXP	<<"#ifndef DBL_MAX_10_EXP">>	<<"#define DBL_MAX_10_EXP">>	DBL_MAX_10_EXP	<<"#endif">>	#endif	#ifdef DBL_MAX_EXP	<<"#ifndef DBL_MAX_EXP">>	<<"#define DBL_MAX_EXP">>	DBL_MAX_EXP	<<"#endif">>	#endif	#ifdef DBL_MIN	<<"#ifndef DBL_MIN">>	<<"#define DBL_MIN">>		DBL_MIN	<<"#endif">>	#endif	#ifdef DBL_MIN_10_EXP	<<"#ifndef DBL_MIN_10_EXP">>	<<"#define DBL_MIN_10_EXP">>	DBL_MIN_10_EXP	<<"#endif">>	#endif	#ifdef DBL_MIN_EXP	<<"#ifndef DBL_MIN_EXP">>	<<"#define DBL_MIN_EXP">>	DBL_MIN_EXP	<<"#endif">>	#endif	#ifdef LDBL_DIG	<<"#ifndef LDBL_DIG">>	<<"#define LDBL_DIG">>		LDBL_DIG	<<"#endif">>	#endif	#ifdef LDBL_MAX	<<"#ifndef LDBL_MAX">>	<<"#define LDBL_MAX">>		LDBL_MAX	<<"#endif">>	#endif	#ifdef LDBL_MAX_10_EXP	<<"#ifndef LDBL_MAX_10_EXP">>	<<"#define LDBL_MAX_10_EXP">>	LDBL_MAX_10_EXP	<<"#endif">>	#endif	#ifdef LDBL_MAX_EXP	<<"#ifndef LDBL_MAX_EXP">>	<<"#define LDBL_MAX_EXP">>	LDBL_MAX_EXP	<<"#endif">>	#endif	#ifdef LDBL_MIN	<<"#ifndef LDBL_MIN">>	<<"#define LDBL_MIN">>		LDBL_MIN	<<"#endif">>	#endif	#ifdef LDBL_MIN_10_EXP	<<"#ifndef LDBL_MIN_10_EXP">>	<<"#define LDBL_MIN_10_EXP">>	LDBL_MIN_10_EXP	<<"#endif">>	#endif	#ifdef LDBL_MIN_EXP	<<"#ifndef LDBL_MIN_EXP">>	<<"#define LDBL_MIN_EXP">>	LDBL_MIN_EXP	<<"#endif">>	#endif}endtst	- output{	#include "FEATURE/common"	#if _hdr_float	#include <float.h>	#endif	#if _hdr_limits	#include <limits.h>	#endif	#if _hdr_math	#include <math.h>	#endif	#if _hdr_values	#include <values.h>	#endif	#include <signal.h>	#ifdef SIGFPE	int caught = 0;	#if _STD_	int catch(int sig)	#else	int catch(sig) int sig;	#endif	{		signal(sig, SIG_IGN);		caught++;		return 0;	}	#endif	main()	{		register int		i;		register int		s;		float			f;		float			pf;		float			mf;		float			xf;		double			d;		double			pd;		double			md;	#if _ast_fltmax_double		char*			fs = "";		char*			ds = "";	#else		_ast_fltmax_t		l;		_ast_fltmax_t		pl;		_ast_fltmax_t		ml;		char*			fs = "F";		char*			ds = "";		char*			ls = "L";	#endif		unsigned long		u;		unsigned _ast_intmax_t	w;		unsigned _ast_intmax_t	pw;		unsigned _ast_intmax_t	x;		unsigned short		us;		unsigned int		ui;		unsigned long		ul;		unsigned _ast_intmax_t	uq;		#ifdef SIGFPE		signal(SIGFPE, catch);	#endif		printf("\n");		printf("\n");		us = 0;		us = ~us;		i = 0;		while (us /= 10)			i++;		printf("#define USHRT_DIG		%d\n", i);		ui = 0;		ui = ~ui;		i = 0;		while (ui /= 10)			i++;		printf("#define UINT_DIG		%d\n", i);		ul = 0;		ul = ~ul;		i = 0;		while (ul /= 10)			i++;		printf("#define ULONG_DIG		%d\n", i);		if (sizeof(uq) > sizeof(ul))		{			uq = 0;			uq = ~uq;			i = 0;			while (uq /= 10)				i++;			printf("#define ULONGLONG_DIG		%d\n", i);			printf("#define UINTMAX_DIG		ULONGLONG_DIG\n");		}		else			printf("#define UINTMAX_DIG		ULONG_DIG\n");		printf("\n");		w = 1;		do		{			pw = w;			w *= 2;			f = (_ast_intmax_t)w;			x = (_ast_intmax_t)f;		} while (w > pw && w == x);		w = (pw - 1) + pw;		u = ~0;		if (u > w)			u = w;		printf("#define FLT_ULONG_MAX		%lu.0F\n", u);		if (sizeof(w) > sizeof(u))		{			printf("#define FLT_ULONGLONG_MAX	%llu.0F\n", w);			printf("#define FLT_UINTMAX_MAX		FLT_ULONGLONG_MAX\n");		}		else			printf("#define FLT_UINTMAX_MAX		FLT_ULONG_MAX\n");	#ifdef FLT_DIG		s = FLT_DIG;	#else		f = pf = 1.0;		s = -1;		do		{			s++;			f *= 10.0;		} while (f != (f + pf));	#endif	#if defined(FLT_MIN) && defined(FLT_MIN_EXP)		i = FLT_MIN_EXP;		mf = FLT_MIN;	#else		i = 3;		f = pf = 1.0;		do		{			i--;			mf = pf;			pf = f;			f /= 2.0;		} while (f < pf);	#ifdef FLT_MIN_EXP		i = FLT_MIN_EXP;	#endif	#ifdef FLT_MIN		mf = FLT_MIN;	#endif	#endif	#ifndef FLT_DIG		printf("#ifndef FLT_DIG\n");		printf("#define FLT_DIG			%d\n", s);		printf("#endif\n");	#endif	#ifndef FLT_MIN		printf("#ifndef FLT_MIN\n");		printf("#define FLT_MIN			%.*E%s\n", s + 1, mf, fs);		printf("#endif\n");	#endif	#ifndef FLT_MIN_EXP		printf("#ifndef FLT_MIN_EXP\n");		printf("#define FLT_MIN_EXP		(%d)\n", i);		printf("#endif\n");	#endif	#if defined(FLT_MAX) && defined(FLT_MAX_EXP)		i = FLT_MAX_EXP;		f = FLT_MAX;	#else		i = -1;		f = pf = 1.0;		do		{			i++;			mf = pf;			pf = f;			f *= 2.0;		} while (f > pf);	#ifdef FLT_MAX_EXP		i = FLT_MAX_EXP;	#endif	#ifdef FLT_MAX		f = FLT_MAX;	#endif	#endif	#ifdef FLT_MAX_EXP		i = FLT_MAX_EXP;	#else		f = 1;		do		{			f *= 2.0;		} while (mf == (mf + f));		f = (mf - f) * 2.0 + f;	#endif		xf = f;	#ifndef FLT_MAX		printf("#ifndef FLT_MAX\n");		printf("#define FLT_MAX			%.*E%s\n", s + 1, f, fs);		printf("#endif\n");	#endif	#ifndef FLT_MAX_EXP		printf("#ifndef FLT_MAX_EXP\n");		printf("#define FLT_MAX_EXP		%d\n", i);		printf("#endif\n");	#endif	#ifdef FLT_MIN_10_EXP		i = FLT_MIN_10_EXP;	#else		i = 2;		f = 1.0;		do		{			i--;			pf = f;			f /= 10.0;		} while (f < pf);	#endif	#ifndef FLT_MIN_10_EXP		printf("#ifndef FLT_MIN_10_EXP\n");		printf("#define FLT_MIN_10_EXP		(%d)\n", i);		printf("#endif\n");	#endif	#ifdef FLT_MAX_10_EXP		i = FLT_MAX_10_EXP;	#else		i = -2;		f = 1.0;		do		{			i++;			pf = f;			f *= 10.0;		} while (f > pf);	#endif	#ifndef FLT_MAX_10_EXP		printf("#ifndef FLT_MAX_10_EXP\n");		printf("#define FLT_MAX_10_EXP		%d\n", i);		printf("#endif\n");	#endif		printf("\n");		w = 1;		do		{			pw = w;			w *= 2;			d = (_ast_intmax_t)w;			x = (_ast_intmax_t)d;		} while (w > pw && w == x);		w = (pw - 1) + pw;		u = ~0;		if (u > w)			u = w;		printf("#define DBL_ULONG_MAX		%lu.0\n", u);		if (sizeof(w) > sizeof(u))		{			printf("#define DBL_ULONGLONG_MAX	%llu.0\n", w);			printf("#define DBL_UINTMAX_MAX		DBL_ULONGLONG_MAX\n");		}		else			printf("#define DBL_UINTMAX_MAX		DBL_ULONG_MAX\n");	#ifdef DBL_DIG		s = DBL_DIG;	#else		d = pd = 1.0;		s = -1;		do		{			s++;			d *= 10.0;		} while (d != (d + pd));	#endif	#if defined(DBL_MIN) && defined(DBL_MIN_EXP)		i = DBL_MIN_EXP;		md = DBL_MIN;	#else		i = 3;		d = pd = 1.0;		do		{			i--;			md = pd;			pd = d;			d /= 2.0;		} while (d < pd);	#ifdef DBL_MIN_EXP		i = DBL_MIN_EXP;	#endif	#ifdef DBL_MIN		md = DBL_MIN;	#endif	#endif	#ifndef DBL_DIG		printf("#ifndef DBL_DIG\n");		printf("#define DBL_DIG			%d\n", s);		printf("#endif\n");	#endif	#ifndef DBL_MIN		printf("#ifndef DBL_MIN\n");		printf("#define DBL_MIN			%.*E%s\n", s + 1, md, ds);		printf("#endif\n");	#endif	#ifndef DBL_MIN_EXP		printf("#ifndef DBL_MIN_EXP\n");		printf("#define DBL_MIN_EXP		(%d)\n", i);		printf("#endif\n");	#endif	#if defined(DBL_MAX) && defined(DBL_MAX_EXP)		i = DBL_MAX_EXP;		d = DBL_MAX;	#else		i = -1;		d = pd = 1.0;		do		{			i++;			md = pd;			pd = d;			d *= 2.0;		} while (d > pd);		d = 1.0;		do		{			d *= 2.0;		} while (md == (md + d));		d = (md - d) * 2.0 + d;	#ifdef DBL_MAX_EXP		i = DBL_MAX_EXP;	#endif	#ifdef DBL_MAX		d = DBL_MAX;	#endif	#endif	#ifndef DBL_MAX		printf("#ifndef DBL_MAX\n");		printf("#define DBL_MAX			%.*E%s\n", s + 1, d, ds);		printf("#endif\n");	#endif	#ifndef DBL_MAX_EXP		printf("#ifndef DBL_MAX_EXP\n");		printf("#define DBL_MAX_EXP		%d\n", i);		printf("#endif\n");	#endif	#ifdef DBL_MIN_10_EXP		i = DBL_MIN_10_EXP;	#else		i = 2;		d = 1.0;		do		{			i--;			pd = d;			d /= 10.0;		} while (d < pd);	#endif	#ifndef DBL_MIN_10_EXP		printf("#ifndef DBL_MIN_10_EXP\n");		printf("#define DBL_MIN_10_EXP		(%d)\n", i);		printf("#endif\n");	#endif	#ifdef DBL_MAX_10_EXP		i = DBL_MAX_10_EXP;	#else		i = -2;		d = 1.0;		do		{			i++;			pd = d;			d *= 10.0;		} while (d > pd);	#endif	#ifndef DBL_MAX_10_EXP		printf("#ifndef DBL_MAX_10_EXP\n");		printf("#define DBL_MAX_10_EXP		%d\n", i);		printf("#endif\n");	#endif	#if !_ast_fltmax_double		printf("\n");		w = 1;		do		{			pw = w;			w *= 2;			l = (_ast_intmax_t)w;			x = (_ast_intmax_t)l;		} while (w > pw && w == x);		w = (pw - 1) + pw;		u = ~0;		if (u > w)			u = w;		printf("#define LDBL_ULONG_MAX		%lu.0L\n", u);		if (sizeof(w) > sizeof(u))		{			printf("#define LDBL_ULONGLONG_MAX	%llu.0L\n", w);			printf("#define LDBL_UINTMAX_MAX	LDBL_ULONGLONG_MAX\n");		}		else			printf("#define LDBL_UINTMAX_MAX	LDBL_ULONG_MAX\n");	#ifdef LDBL_DIG		s = LDBL_DIG;	#else		l = pl = 1.0L;		s = -1;		do		{			s++;			l *= 10.0L;		} while (l != (l + pl));	#endif	#if defined(LDBL_MIN) && defined(LDBL_MIN_EXP)		i = LDBL_MIN_EXP;		ml = LDBL_MIN;	#else		i = 3;		l = pl = 1.0L;		do		{			i--;			ml = pl;			pl = l;			l /= 2.0L;		} while (l < pl);	#ifdef LDBL_MIN_EXP		i = LDBL_MIN_EXP;	#endif	#ifdef LDBL_MIN		ml = LDBL_MIN;	#endif	#endif	#ifndef LDBL_DIG		printf("#ifndef LDBL_DIG\n");		printf("#define LDBL_DIG		%d\n", s);		printf("#endif\n");	#endif	#ifndef LDBL_MIN		printf("#ifndef LDBL_MIN\n");		printf("#define LDBL_MIN		%.*LE%s\n", s + 1, ml, ls);		printf("#endif\n");	#endif	#ifndef LDBL_MIN_EXP		printf("#ifndef LDBL_MIN_EXP\n");		printf("#define LDBL_MIN_EXP		(%d)\n", i);		printf("#endif\n");	#endif	#if defined(LDBL_MAX) && defined(LDBL_MAX_EXP)		i = LDBL_MAX_EXP;		l = LDBL_MAX;	#else		i = -1;		l = pl = 1.0L;		do		{			i++;			ml = pl;			pl = l;			l *= 2.0L;		} while (l > pl);		l = 1.0L;		do		{			l *= 2.0L;		} while (ml == (ml + l));		l = (ml - l) * 2.0L + l;	#ifdef LDBL_MAX_EXP		i = LDBL_MAX_EXP;	#endif	#ifdef LDBL_MAX		l = LDBL_MAX;	#endif	#endif	#ifndef LDBL_MAX		printf("#ifndef LDBL_MAX\n");		printf("#define LDBL_MAX		%.*LE%s\n", s + 1, l, ls);		printf("#endif\n");	#endif	#ifndef LDBL_MAX_EXP		printf("#ifndef LDBL_MAX_EXP\n");		printf("#define LDBL_MAX_EXP		%d\n", i);		printf("#endif\n");	#endif	#ifdef LDBL_MIN_10_EXP		i = LDBL_MIN_10_EXP;	#else		i = 2;		l = 1.0L;		do		{			i--;			pl = l;			l /= 10.0L;		} while (l < pl);	#endif	#ifndef LDBL_MIN_10_EXP		printf("#ifndef LDBL_MIN_10_EXP\n");		printf("#define LDBL_MIN_10_EXP		(%d)\n", i);		printf("#endif\n");	#endif	#ifdef LDBL_MAX_10_EXP		i = LDBL_MAX_10_EXP;	#else		i = -2;		l = 1.0L;		do		{			i++;			pl = l;			l *= 10.0L;		} while (l > pl);	#endif	#ifndef LDBL_MAX_10_EXP		printf("#ifndef LDBL_MAX_10_EXP\n");		printf("#define LDBL_MAX_10_EXP		%d\n", i);		printf("#endif\n");	#endif	#endif	#ifdef SIGFPE		if (!caught)		{			f = xf;			f *= 2;			if (!f)				caught = 1;		}		if (caught)			printf("#define _ast_fltsig		%d\n", SIGFPE);	#endif		printf("\n");	#if !_lib_frexp && !defined(frexp)		printf("extern double		frexp(double, int*);\n");	#endif	#if !_lib_frexpl && !defined(frexpl)		printf("extern _ast_fltmax_t	frexpl(_ast_fltmax_t, int*);\n");	#endif	#if !_lib_ldexp && !defined(ldexp)		printf("extern double		ldexp(double, int);\n");	#endif	#if !_lib_ldexpl && !defined(ldexpl)		printf("extern _ast_fltmax_t	ldexpl(_ast_fltmax_t, int);\n");	#endif		return 0;	}}endtst	- -DN=1 - -DN=2 output{	main()	{	#if N == 1		unsigned long long	m;		long double		f = 123.456;		m = f;		if (!m || f == m)			return 1;		printf("#define _ast_flt_unsigned_max_t	unsigned long long\n");	#else		printf("#define _ast_flt_unsigned_max_t	unsigned long\n");	#endif		return 0;	}}endtst	- -DEXP=1 - -DADD=1 - -DMPY=1 output{	#include "FEATURE/common"	#include <sys/types.h>	#include <signal.h>	#if _hdr_float	#include <float.h>	#endif	#if _hdr_limits	#include <limits.h>	#endif	#if _hdr_math	#include <math.h>	#endif	#if _hdr_values	#include <values.h>	#endif	#if !defined(FLT_MAX) && defined(MAXFLOAT)	#define FLT_MAX		MAXFLOAT	#endif	#if !defined(DBL_MAX) && defined(MAXDOUBLE)	#define DBL_MAX		MAXDOUBLE	#endif	static void	#if _STD_	list(const char* pfx, void* val, int siz)	#else	list(pfx, val, siz)	char* pfx;	void* val;	int siz;	#endif	{		register unsigned char*	u = (unsigned char*)val;		register unsigned char*	e = u + siz;			printf("#define _ast_%s_nan_init\t0x%02x", pfx, *u);		while (++u < e)			printf(",0x%02x", *u);		printf("\n");	}	main()	{	#ifdef SIGFPE		signal(SIGFPE, SIG_IGN);	#endif	#ifdef FLT_MAX		{			float	f = FLT_MAX;	#if ADD			f += f;	#endif	#if EXP			f = exp(f);	#endif	#if MPY			f *= 2;	#endif			list("flt", &f, sizeof(f));		}	#endif	#ifdef DBL_MAX		{			double	f = DBL_MAX;	#if ADD			f += f;	#endif	#if EXP			f = exp(f);	#endif	#if MPY			f *= 2;	#endif			list("dbl", &f, sizeof(f));		}	#endif	#ifdef LDBL_MAX		{			long double	f = LDBL_MAX;	#if ADD			f += f;	#endif	#if EXP			f = exp(f);	#endif	#if MPY			f *= 2;	#endif			list("ldbl", &f, sizeof(f));		}	#endif		return 0;	}}end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -