/** This file is part of the MicroPython project, http://micropython.org/** These math functions are taken from newlib-nano-2, the newlib/libm/common* directory, available from https://github.com/32bitmicro/newlib-nano-2.** Appropriate copyright headers are reproduced below.*//* sf_modf.c -- float version of s_modf.c.* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.*//** ====================================================* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.** Developed at SunPro, a Sun Microsystems, Inc. business.* Permission to use, copy, modify, and distribute this* software is freely granted, provided that this notice* is preserved.* ====================================================*/#include "fdlibm.h"#ifdef __STDC__static const float one = 1.0f;#elsestatic float one = 1.0f;#endif#ifdef __STDC__float modff(float x, float *iptr)#elsefloat modff(x, iptr)float x,*iptr;#endif{__int32_t i0,j0;__uint32_t i;GET_FLOAT_WORD(i0,x);j0 = ((i0>>23)&0xff)-0x7f; /* exponent of x */if(j0<23) { /* integer part in x */if(j0<0) { /* |x|<1 */SET_FLOAT_WORD(*iptr,i0&0x80000000); /* *iptr = +-0 */return x;} else {i = (0x007fffff)>>j0;if((i0&i)==0) { /* x is integral */__uint32_t ix;*iptr = x;GET_FLOAT_WORD(ix,x);SET_FLOAT_WORD(x,ix&0x80000000); /* return +-0 */return x;} else {SET_FLOAT_WORD(*iptr,i0&(~i));return x - *iptr;}}} else { /* no fraction part */__uint32_t ix;*iptr = x*one;GET_FLOAT_WORD(ix,x);SET_FLOAT_WORD(x,ix&0x80000000); /* return +-0 */return x;}}#ifdef _DOUBLE_IS_32BITS#ifdef __STDC__double modf(double x, double *iptr)#elsedouble modf(x, iptr)double x,*iptr;#endif{return (double) modff((float) x, (float *) iptr);}#endif /* defined(_DOUBLE_IS_32BITS) */
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。