11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* @(#)e_scalb.c 1.3 95/01/18 */ 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ==================================================== 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Developed at SunSoft, a Sun Microsystems, Inc. business. 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Permission to use, copy, modify, and distribute this 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * software is freely granted, provided that this notice 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * is preserved. 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ==================================================== 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef lint 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic char rcsid[] = "$FreeBSD: src/lib/msun/src/e_scalb.c,v 1.12 2005/02/04 18:26:06 das Exp $"; 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * __ieee754_scalb(x, fn) is provide for 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * passing various standard test suite. One 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * should use scalbn() instead. 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include "math.h" 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include "math_private.h" 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef _SCALB_INT 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectdouble 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__ieee754_scalb(double x, int fn) 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectdouble 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__ieee754_scalb(double x, double fn) 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef _SCALB_INT 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return scalbn(x,fn); 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else 381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project if (isnan(x)||isnan(fn)) return x*fn; 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project if (!finite(fn)) { 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project if(fn>0.0) return x*fn; 411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project else return x/(-fn); 421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project } 431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project if (rint(fn)!=fn) return (fn-fn)/(fn-fn); 441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project if ( fn > 65000.0) return scalbn(x, 65000); 451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project if (-fn > 65000.0) return scalbn(x,-65000); 461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return scalbn(x,(int)fn); 471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif 481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 49