File:  [CSRG BSD Unix] / 3BSD / libc / gen / ldexp.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:12:53 2018 UTC (8 years, 1 month ago) by root
Branches: MAIN, CSRG
CVS tags: HEAD, BSD3
BSD 3.0

double
ldexp(fr,exp) double fr; int exp;{
double	huge	= 1.701411834604692293e38;
	int neg;
	int i;
	double frexp();

	neg = 0;
	if(fr<0){
		fr = -fr;
		neg = 1;
		}
	fr = frexp(fr,&i);
	while(fr<.5){
		fr = 2*fr;
		i = i-1;
		}
	exp = exp+i;
	if(exp>127)
		if(neg)
			return(-huge);
		else
			return(huge);
	if(exp<-127)
		return(0);
	while(exp>30){
		fr = fr*(1L<<30);
		exp = exp-30;
		}
	while(exp<-30){
		fr = fr/(1L<<30);
		exp = exp+30;
		}
	if(exp>0)
		fr = fr*(1L<<exp);
	if(exp<0)
		fr = fr/(1L<<-exp);
	if(neg) fr = -fr;
	return(fr);
	}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.