Changeset e6f5766 in mainline
- Timestamp:
- 2015-09-05T10:11:40Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9adb61d
- Parents:
- 01cdd5a
- Location:
- uspace/lib/math
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/math/arch/abs32le/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline float64_t trunc(float64_t val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/arch/amd64/include/libarch/math.h
r01cdd5a re6f5766 54 54 static inline float64_t ceil(float64_t val) 55 55 { 56 float64_u arg; 57 arg.val = val; 58 59 float64_u ret; 60 ret.data = ceil_float64(arg.data); 61 62 return ret.val; 56 return float64_ceil(val); 63 57 } 64 58 … … 75 69 static inline float64_t floor(float64_t val) 76 70 { 77 float64_u arg; 78 arg.val = val; 79 80 float64_u ret; 81 ret.data = floor_float64(arg.data); 82 83 return ret.val; 71 return float64_floor(val); 84 72 } 85 73 -
uspace/lib/math/arch/arm32/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline float64_t trunc(float64_t val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/arch/ia32/include/libarch/math.h
r01cdd5a re6f5766 54 54 static inline float64_t ceil(float64_t val) 55 55 { 56 float64_u arg; 57 arg.val = val; 58 59 float64_u ret; 60 ret.data = ceil_float64(arg.data); 61 62 return ret.val; 56 return float64_ceil(val); 63 57 } 64 58 65 59 static inline float64_t floor(float64_t val) 66 60 { 67 float64_u arg; 68 arg.val = val; 69 70 float64_u ret; 71 ret.data = floor_float64(arg.data); 72 73 return ret.val; 61 return float64_floor(val); 74 62 } 75 63 -
uspace/lib/math/arch/ia64/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline float64_t trunc(float64_t val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/arch/mips32/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline float64_t trunc(float64_t val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/arch/mips32eb/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline float64_t trunc(float64_t val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/arch/ppc32/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline double trunc(double val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/arch/sparc32/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline float64_t trunc(float64_t val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/arch/sparc64/include/libarch/math.h
r01cdd5a re6f5766 53 53 static inline float64_t trunc(float64_t val) 54 54 { 55 float64_u arg; 56 arg.val = val; 57 58 float64_u ret; 59 ret.data = trunc_float64(arg.data); 60 61 return ret.val; 55 return float64_trunc(val); 62 56 } 63 57 64 58 static inline float64_t ceil(float64_t val) 65 59 { 66 float64_u arg; 67 arg.val = val; 68 69 float64_u ret; 70 ret.data = ceil_float64(arg.data); 71 72 return ret.val; 60 return float64_ceil(val); 73 61 } 74 62 … … 85 73 static inline float64_t floor(float64_t val) 86 74 { 87 float64_u arg; 88 arg.val = val; 89 90 float64_u ret; 91 ret.data = floor_float64(arg.data); 92 93 return ret.val; 75 return float64_floor(val); 94 76 } 95 77 -
uspace/lib/math/generic/ceil.c
r01cdd5a re6f5766 43 43 * @return Number rounded towards positive infinity. 44 44 */ 45 float64 ceil_float64(float64val)45 float64_t float64_ceil(float64_t val) 46 46 { 47 47 float64_u t; … … 49 49 float64_u r; 50 50 51 v. data= val;52 t. data = trunc_float64(val);51 v.val = val; 52 t.val = float64_trunc(val); 53 53 54 if (v al.parts.sign == 1 || v.val == t.val) {54 if (v.data.parts.sign == 1 || val == t.val) { 55 55 r = t; 56 56 } else { … … 58 58 } 59 59 60 return r. data;60 return r.val; 61 61 } 62 62 -
uspace/lib/math/generic/exp.c
r01cdd5a re6f5766 111 111 { 112 112 float32_t f; 113 float32_u i; 114 float32_u m; 113 float32_t i; 115 114 float32_u r; 116 115 … … 122 121 */ 123 122 124 m.val = arg * M_LOG2E; 125 i.data = trunc_float32(m.data); 126 f = arg * M_LOG2E - i.val; 123 i = float32_trunc(arg * M_LOG2E); 124 f = arg * M_LOG2E - i; 127 125 128 126 r.val = taylor_exp_32(M_LN2 * f); 129 r.data.parts.exp += i .val;127 r.data.parts.exp += i; 130 128 return r.val; 131 129 } … … 143 141 { 144 142 float64_t f; 145 float64_u i; 146 float64_u m; 143 float64_t i; 147 144 float64_u r; 148 145 … … 154 151 */ 155 152 156 m.val = arg * M_LOG2E; 157 i.data = trunc_float64(m.data); 158 f = arg * M_LOG2E - i.val; 153 i = float64_trunc(arg * M_LOG2E); 154 f = arg * M_LOG2E - i; 159 155 160 156 r.val = taylor_exp_64(M_LN2 * f); 161 r.data.parts.exp += i .val;157 r.data.parts.exp += i; 162 158 return r.val; 163 159 } -
uspace/lib/math/generic/floor.c
r01cdd5a re6f5766 44 44 */ 45 45 46 float64 floor_float64(float64val)46 float64_t float64_floor(float64_t val) 47 47 { 48 float64_ ut;48 float64_t t; 49 49 float64_u v; 50 float64_u r;51 50 52 v. data= val;53 t .data = trunc_float64(val);51 v.val = val; 52 t = float64_trunc(val); 54 53 55 if (val.parts.sign == 0 || v.val == t.val) { 56 r = t; 57 } else { 58 r.val = t.val - 1.0; 59 } 60 61 return r.data; 54 if (v.data.parts.sign == 0 || val == t) 55 return t; 56 else 57 return t - 1.0; 62 58 } 63 59 -
uspace/lib/math/generic/trunc.c
r01cdd5a re6f5766 51 51 * 52 52 */ 53 float32 trunc_float32(float32val)53 float32_t float32_trunc(float32_t val) 54 54 { 55 int32_t exp = val.parts.exp - FLOAT32_BIAS; 55 float32_u v; 56 int32_t exp; 57 58 v.val = val; 59 exp = v.data.parts.exp - FLOAT32_BIAS; 56 60 57 61 if (exp < 0) { 58 62 /* -1 < val < 1 => result is +0 or -0 */ 59 v al.parts.exp = 0;60 v al.parts.fraction = 0;63 v.data.parts.exp = 0; 64 v.data.parts.fraction = 0; 61 65 } else if (exp >= FLOAT32_FRACTION_SIZE) { 62 66 if (exp == 1024) { … … 68 72 } else { 69 73 /* Truncate irrelevant fraction bits */ 70 v al.parts.fraction &= ~(UINT32_C(0x007fffff) >> exp);74 v.data.parts.fraction &= ~(UINT32_C(0x007fffff) >> exp); 71 75 } 72 76 73 return v al;77 return v.val; 74 78 } 75 79 … … 89 93 * 90 94 */ 91 float64 trunc_float64(float64val)95 float64_t float64_trunc(float64_t val) 92 96 { 93 int32_t exp = val.parts.exp - FLOAT64_BIAS; 97 float64_u v; 98 int32_t exp; 99 100 v.val = val; 101 exp = v.data.parts.exp - FLOAT64_BIAS; 94 102 95 103 if (exp < 0) { 96 104 /* -1 < val < 1 => result is +0 or -0 */ 97 v al.parts.exp = 0;98 v al.parts.fraction = 0;105 v.data.parts.exp = 0; 106 v.data.parts.fraction = 0; 99 107 } else if (exp >= FLOAT64_FRACTION_SIZE) { 100 108 if (exp == 1024) { … … 106 114 } else { 107 115 /* Truncate irrelevant fraction bits */ 108 v al.parts.fraction &= ~(UINT64_C(0x000fffffffffffff) >> exp);116 v.data.parts.fraction &= ~(UINT64_C(0x000fffffffffffff) >> exp); 109 117 } 110 118 111 return v al;119 return v.val; 112 120 } 113 121 -
uspace/lib/math/include/ceil.h
r01cdd5a re6f5766 38 38 #include <mathtypes.h> 39 39 40 extern float64 ceil_float64(float64);40 extern float64_t float64_ceil(float64_t); 41 41 42 42 #endif -
uspace/lib/math/include/floor.h
r01cdd5a re6f5766 38 38 #include <mathtypes.h> 39 39 40 extern float64 floor_float64(float64);40 extern float64_t float64_floor(float64_t); 41 41 42 42 #endif -
uspace/lib/math/include/trig.h
r01cdd5a re6f5766 36 36 #define LIBMATH_TRIG_H_ 37 37 38 #include <mathtypes.h> 39 38 40 extern float64_t float64_sin(float64_t); 39 41 extern float64_t float64_cos(float64_t); -
uspace/lib/math/include/trunc.h
r01cdd5a re6f5766 38 38 #include <mathtypes.h> 39 39 40 extern float32 trunc_float32(float32);41 extern float64 trunc_float64(float64);40 extern float32_t float32_trunc(float32_t); 41 extern float64_t float64_trunc(float64_t); 42 42 43 43 #endif
Note:
See TracChangeset
for help on using the changeset viewer.