Changeset 992ffa6 in mainline for uspace/app/tester/float/float2.c
- Timestamp:
- 2015-09-04T06:40:20Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 01cdd5a
- Parents:
- bae1e1f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/tester/float/float2.c
rbae1e1f r992ffa6 1 1 /* 2 2 * Copyright (c) 2014 Martin Decky 3 * Copyright (c) 2015 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 30 #include <stdbool.h> 29 31 #include <stdio.h> 30 32 #include <stdlib.h> … … 32 34 #include "../tester.h" 33 35 34 #define OPERANDS 10 35 #define PRECISION 100000000 36 #define OPERANDS 10 37 #define PRECISIONF 10000 38 #define PRECISION 100000000 36 39 37 40 static double arguments[OPERANDS] = { 38 41 3.5, -2.1, 100.0, 50.0, -1024.0, 0.0, 768.3156, 1080.499999, -600.0, 1.0 39 42 }; 43 44 static double arguments_exp[OPERANDS] = { 45 3.5, -2.1, 50.0, 0.0, 1.0, 13.2, -1.1, -5.5, 0.1, -66.0 46 }; 47 48 static double arguments_log[OPERANDS] = { 49 3.5, 100.0, 50.0, 768.3156, 1080.499999, 1.0, 66.0, 50 2.718281828459045, 9.9, 0.001 51 }; 52 40 53 41 54 static double results_ceil[OPERANDS] = { … … 63 76 }; 64 77 78 static double results_log[OPERANDS] = { 79 1.252762968495, 4.605170185988, 3.912023005428, 6.644200586236, 80 6.985179175021, 0.000000000000, 4.189654742026, 1.000000000000, 81 2.292534757141, -6.907755278982 82 }; 83 84 static double results_exp[OPERANDS] = { 85 33.115451958692, 0.122456428253, 5184705528587072045056.0, 86 1.000000000000, 2.718281828459, 540364.937246691552, 0.332871083698, 87 0.004086771438, 1.105170918076, 0.000000000000 88 }; 89 90 static bool cmp_float(float a, float b) 91 { 92 float r; 93 94 /* XXX Need fabsf() */ 95 if (b < 1.0 / PRECISIONF && b > -1.0 / PRECISIONF) 96 r = a; 97 else 98 r = a / b - 1.0; 99 100 /* XXX Need fabsf() */ 101 if (r < 0.0) 102 r = -r; 103 104 return r < 1.0 / PRECISIONF; 105 } 106 107 static bool cmp_double(double a, double b) 108 { 109 double r; 110 111 /* XXX Need fabs() */ 112 if (b < 1.0 / PRECISION && b > -1.0 / PRECISION) 113 r = a; 114 else 115 r = a / b - 1.0; 116 117 /* XXX Need fabs() */ 118 if (r < 0.0) 119 r = -r; 120 121 return r < 1.0 / PRECISION; 122 } 123 65 124 const char *test_float2(void) 66 125 { 67 126 bool fail = false; 68 127 69 128 for (unsigned int i = 0; i < OPERANDS; i++) { 70 129 double res = floor(arguments[i]); … … 73 132 74 133 if (res_int != corr_int) { 75 TPRINTF("Double floor failed (%" PRId64 " !=%" PRId6476 " , arg %u)\n", res_int, corr_int, i);134 TPRINTF("Double precision floor failed (%" PRId64 135 " != %" PRId64 ", arg %u)\n", res_int, corr_int, i); 77 136 fail = true; 78 137 } … … 85 144 86 145 if (res_int != corr_int) { 87 TPRINTF("Double ceil failed (%" PRId64 " !=%" PRId6488 " , arg %u)\n", res_int, corr_int, i);146 TPRINTF("Double precision ceil failed (%" PRId64 147 " != %" PRId64 ", arg %u)\n", res_int, corr_int, i); 89 148 fail = true; 90 149 } … … 97 156 98 157 if (res_int != corr_int) { 99 TPRINTF("Double truncation failed (%" PRId64 " !=%" PRId64100 " , arg %u)\n", res_int, corr_int, i);158 TPRINTF("Double precisiontruncation failed (%" PRId64 159 " != %" PRId64 ", arg %u)\n", res_int, corr_int, i); 101 160 fail = true; 102 161 } … … 109 168 110 169 if (res_int != corr_int) { 111 TPRINTF("Double sine failed (%" PRId64 " !=%" PRId64112 " , arg %u)\n", res_int, corr_int, i);170 TPRINTF("Double precision sine failed (%" PRId64 171 " != %" PRId64 ", arg %u)\n", res_int, corr_int, i); 113 172 fail = true; 114 173 } … … 121 180 122 181 if (res_int != corr_int) { 123 TPRINTF("Double cosine failed (%" PRId64 " != %" PRId64 124 ", arg %u)\n", res_int, corr_int, i); 182 TPRINTF("Double precision cosine failed (%" PRId64 183 " != %" PRId64 ", arg %u)\n", res_int, corr_int, i); 184 fail = true; 185 } 186 } 187 188 for (unsigned int i = 0; i < OPERANDS; i++) { 189 float res = logf(arguments_log[i]); 190 191 if (!cmp_float(res, results_log[i])) { 192 TPRINTF("Single precision logarithm failed " 193 "(%lf != %lf, arg %u)\n", res, results_log[i], i); 194 fail = true; 195 } 196 } 197 198 for (unsigned int i = 0; i < OPERANDS; i++) { 199 double res = log(arguments_log[i]); 200 201 if (!cmp_double(res, results_log[i])) { 202 TPRINTF("Double precision logarithm failed " 203 "(%lf != %lf, arg %u)\n", res, results_log[i], i); 204 fail = true; 205 } 206 } 207 208 for (unsigned int i = 0; i < OPERANDS; i++) { 209 float res = exp(arguments_exp[i]); 210 211 if (!cmp_float(res, results_exp[i])) { 212 TPRINTF("Single precision exponential failed " 213 "(%lf != %lf, arg %u)\n", res, results_exp[i], i); 214 fail = true; 215 } 216 } 217 218 for (unsigned int i = 0; i < OPERANDS; i++) { 219 double res = exp(arguments_exp[i]); 220 221 if (!cmp_double(res, results_exp[i])) { 222 TPRINTF("Double precision exponential failed " 223 "(%lf != %lf, arg %u)\n", res, results_exp[i], i); 125 224 fail = true; 126 225 }
Note:
See TracChangeset
for help on using the changeset viewer.