15463dc25Sbostic /*- 2*325d3b5eSbostic * Copyright (c) 1991, 1993 3*325d3b5eSbostic * The Regents of the University of California. All rights reserved. 45463dc25Sbostic * 55463dc25Sbostic * %sccs.include.redist.c% 65463dc25Sbostic */ 75463dc25Sbostic 85463dc25Sbostic #if defined(LIBC_SCCS) && !defined(lint) 9*325d3b5eSbostic static char sccsid[] = "@(#)frexp.c 8.1 (Berkeley) 06/04/93"; 105463dc25Sbostic #endif /* LIBC_SCCS and not lint */ 115463dc25Sbostic 125463dc25Sbostic #include <sys/types.h> 135463dc25Sbostic #include <math.h> 145463dc25Sbostic 155463dc25Sbostic double frexp(value,eptr)165463dc25Sbosticfrexp(value, eptr) 175463dc25Sbostic double value; 185463dc25Sbostic int *eptr; 195463dc25Sbostic { 205463dc25Sbostic union { 215463dc25Sbostic double v; 225463dc25Sbostic struct { 235463dc25Sbostic u_int u_sign : 1; 245463dc25Sbostic u_int u_exp : 11; 255463dc25Sbostic u_int u_mant1 : 20; 265463dc25Sbostic u_int u_mant2 : 32; 275463dc25Sbostic } s; 285463dc25Sbostic } u; 295463dc25Sbostic 305463dc25Sbostic if (value) { 315463dc25Sbostic u.v = value; 325463dc25Sbostic *eptr = u.s.u_exp - 1022; 335463dc25Sbostic u.s.u_exp = 1022; 345463dc25Sbostic return(u.v); 355463dc25Sbostic } else { 365463dc25Sbostic *eptr = 0; 375463dc25Sbostic return((double)0); 385463dc25Sbostic } 395463dc25Sbostic } 40