Numworks Epsilon
1.4.1
Graphing Calculator Operating System
s_modff.c
Go to the documentation of this file.
1
/* s_modff.c -- float version of s_modf.c.
2
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3
*/
4
5
/*
6
* ====================================================
7
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8
*
9
* Developed at SunPro, a Sun Microsystems, Inc. business.
10
* Permission to use, copy, modify, and distribute this
11
* software is freely granted, provided that this notice
12
* is preserved.
13
* ====================================================
14
*/
15
16
#include "math.h"
17
#include "
math_private.h
"
18
19
static
const
float
one
= 1.0;
20
21
float
22
modff
(
float
x,
float
*iptr)
23
{
24
int32_t
i0,jj0;
25
u_int32_t
i;
26
GET_FLOAT_WORD
(i0,x);
27
jj0 = ((i0>>23)&0xff)-0x7f;
/* exponent of x */
28
if
(jj0<23) {
/* integer part in x */
29
if
(jj0<0) {
/* |x|<1 */
30
SET_FLOAT_WORD
(*iptr,i0&0x80000000);
/* *iptr = +-0 */
31
return
x;
32
}
else
{
33
i = (0x007fffff)>>jj0;
34
if
((i0&i)==0) {
/* x is integral */
35
u_int32_t
ix;
36
*iptr = x;
37
GET_FLOAT_WORD
(ix,x);
38
SET_FLOAT_WORD
(x,ix&0x80000000);
/* return +-0 */
39
return
x;
40
}
else
{
41
SET_FLOAT_WORD
(*iptr,i0&(~i));
42
return
x - *iptr;
43
}
44
}
45
}
else
{
/* no fraction part */
46
u_int32_t
ix;
47
*iptr = x*
one
;
48
GET_FLOAT_WORD
(ix,x);
49
SET_FLOAT_WORD
(x,ix&0x80000000);
/* return +-0 */
50
return
x;
51
}
52
}
one
#define one
Definition:
k_tan.c:68
u_int32_t
uint32_t u_int32_t
Definition:
types.h:10
modff
float modff(float x, float *iptr)
Definition:
s_modff.c:22
SET_FLOAT_WORD
#define SET_FLOAT_WORD(d, i)
Definition:
math_private.h:335
GET_FLOAT_WORD
#define GET_FLOAT_WORD(i, d)
Definition:
math_private.h:326
int32_t
signed int int32_t
Definition:
stdint.h:11
math_private.h
epsilon
liba
src
external
openbsd
s_modff.c
Generated by
1.8.14