1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
|
/* Test of pow() function.
$Id: pow-01.c,v 1.1 2007/02/05 21:35:58 dmix Exp $
*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "progmem.h"
union lofl_u {
long lo;
float fl;
};
volatile union lofl_u v = { .lo = 1 };
PROGMEM const struct { /* Table of test cases */
union lofl_u x, y; /* args */
union lofl_u z; /* pow(x,y) */
} t[] = {
{ { 0x00000000 },{ 0x00000000 },{ 0x3f800000 } }, /* 0 0 1 */
{ { 0x00000000 },{ 0x3f000000 },{ 0x00000000 } }, /* 0 0.5 0 */
{ { 0x00000000 },{ 0x3f800000 },{ 0x00000000 } }, /* 0 1 0 */
{ { 0x00000000 },{ 0x3fc00000 },{ 0x00000000 } }, /* 0 1.5 0 */
{ { 0x00000000 },{ 0x40000000 },{ 0x00000000 } }, /* 0 2 0 */
{ { 0x00000000 },{ 0x40400000 },{ 0x00000000 } }, /* 0 3 0 */
{ { 0x00000000 },{ 0x7f800000 },{ 0x00000000 } }, /* 0 inf 0 */
{ { 0x00000000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* 0 nan nan */
{ { 0x00000000 },{ 0x80000000 },{ 0x3f800000 } }, /* 0 -0 1 */
{ { 0x00000000 },{ 0xbf000000 },{ 0x7f800000 } }, /* 0 -0.5 inf */
{ { 0x00000000 },{ 0xbf800000 },{ 0x7f800000 } }, /* 0 -1 inf */
{ { 0x00000000 },{ 0xbfc00000 },{ 0x7f800000 } }, /* 0 -1.5 inf */
{ { 0x00000000 },{ 0xc0000000 },{ 0x7f800000 } }, /* 0 -2 inf */
{ { 0x00000000 },{ 0xc0400000 },{ 0x7f800000 } }, /* 0 -3 inf */
{ { 0x00000000 },{ 0xff800000 },{ 0x7f800000 } }, /* 0 -inf inf */
{ { 0x80000000 },{ 0x00000000 },{ 0x3f800000 } }, /* -0 0 1 */
{ { 0x80000000 },{ 0x3f000000 },{ 0x00000000 } }, /* -0 0.5 0 */
{ { 0x80000000 },{ 0x3f800000 },{ 0x80000000 } }, /* -0 1 -0 */
{ { 0x80000000 },{ 0x3fc00000 },{ 0x00000000 } }, /* -0 1.5 0 */
{ { 0x80000000 },{ 0x40000000 },{ 0x00000000 } }, /* -0 2 0 */
{ { 0x80000000 },{ 0x40400000 },{ 0x80000000 } }, /* -0 3 -0 */
{ { 0x80000000 },{ 0x7f800000 },{ 0x00000000 } }, /* -0 inf 0 */
{ { 0x80000000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* -0 nan nan */
{ { 0x80000000 },{ 0x80000000 },{ 0x3f800000 } }, /* -0 -0 1 */
{ { 0x80000000 },{ 0xbf000000 },{ 0x7f800000 } }, /* -0 -0.5 inf */
{ { 0x80000000 },{ 0xbf800000 },{ 0xff800000 } }, /* -0 -1 -inf */
{ { 0x80000000 },{ 0xbfc00000 },{ 0x7f800000 } }, /* -0 -1.5 inf */
{ { 0x80000000 },{ 0xc0000000 },{ 0x7f800000 } }, /* -0 -2 inf */
{ { 0x80000000 },{ 0xc0400000 },{ 0xff800000 } }, /* -0 -3 -inf */
{ { 0x80000000 },{ 0xff800000 },{ 0x7f800000 } }, /* -0 -inf inf */
{ { 0x3f000000 },{ 0x00000000 },{ 0x3f800000 } }, /* 0.5 0 1 */
{ { 0x3f000000 },{ 0x3f000000 },{ 0x3f3504f3 } }, /* 0.5 0.5 0.707 */
{ { 0x3f000000 },{ 0x3f800000 },{ 0x3f000000 } }, /* 0.5 1 0.5 */
{ { 0x3f000000 },{ 0x3fc00000 },{ 0x3eb504f3 } }, /* 0.5 1.5 0.354 */
{ { 0x3f000000 },{ 0x40000000 },{ 0x3e800000 } }, /* 0.5 2 0.25 */
{ { 0x3f000000 },{ 0x40400000 },{ 0x3e000000 } }, /* 0.5 3 0.125 */
{ { 0x3f000000 },{ 0x7f800000 },{ 0x00000000 } }, /* 0.5 inf 0 */
{ { 0x3f000000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* 0.5 nan nan */
{ { 0x3f000000 },{ 0x80000000 },{ 0x3f800000 } }, /* 0.5 -0 1 */
{ { 0x3f000000 },{ 0xbf000000 },{ 0x3fb504f3 } }, /* 0.5 -0.5 1.41 */
{ { 0x3f000000 },{ 0xbf800000 },{ 0x40000000 } }, /* 0.5 -1 2 */
{ { 0x3f000000 },{ 0xbfc00000 },{ 0x403504f3 } }, /* 0.5 -1.5 2.83 */
{ { 0x3f000000 },{ 0xc0000000 },{ 0x40800000 } }, /* 0.5 -2 4 */
{ { 0x3f000000 },{ 0xc0400000 },{ 0x41000000 } }, /* 0.5 -3 8 */
{ { 0x3f000000 },{ 0xff800000 },{ 0x7f800000 } }, /* 0.5 -inf inf */
{ { 0xbf000000 },{ 0x00000000 },{ 0x3f800000 } }, /* -0.5 0 1 */
{ { 0xbf000000 },{ 0x3f000000 },{ 0xffc00000 } }, /* -0.5 0.5 nan */
{ { 0xbf000000 },{ 0x3f800000 },{ 0xbf000000 } }, /* -0.5 1 -0.5 */
{ { 0xbf000000 },{ 0x3fc00000 },{ 0xffc00000 } }, /* -0.5 1.5 nan */
{ { 0xbf000000 },{ 0x40000000 },{ 0x3e800000 } }, /* -0.5 2 0.25 */
{ { 0xbf000000 },{ 0x40400000 },{ 0xbe000000 } }, /* -0.5 3 -0.125 */
{ { 0xbf000000 },{ 0x7f800000 },{ 0x00000000 } }, /* -0.5 inf 0 */
{ { 0xbf000000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* -0.5 nan nan */
{ { 0xbf000000 },{ 0x80000000 },{ 0x3f800000 } }, /* -0.5 -0 1 */
{ { 0xbf000000 },{ 0xbf000000 },{ 0xffc00000 } }, /* -0.5 -0.5 nan */
{ { 0xbf000000 },{ 0xbf800000 },{ 0xc0000000 } }, /* -0.5 -1 -2 */
{ { 0xbf000000 },{ 0xbfc00000 },{ 0xffc00000 } }, /* -0.5 -1.5 nan */
{ { 0xbf000000 },{ 0xc0000000 },{ 0x40800000 } }, /* -0.5 -2 4 */
{ { 0xbf000000 },{ 0xc0400000 },{ 0xc1000000 } }, /* -0.5 -3 -8 */
{ { 0xbf000000 },{ 0xff800000 },{ 0x7f800000 } }, /* -0.5 -inf inf */
{ { 0x3f800000 },{ 0x00000000 },{ 0x3f800000 } }, /* 1 0 1 */
{ { 0x3f800000 },{ 0x3f000000 },{ 0x3f800000 } }, /* 1 0.5 1 */
{ { 0x3f800000 },{ 0x3f800000 },{ 0x3f800000 } }, /* 1 1 1 */
{ { 0x3f800000 },{ 0x3fc00000 },{ 0x3f800000 } }, /* 1 1.5 1 */
{ { 0x3f800000 },{ 0x40000000 },{ 0x3f800000 } }, /* 1 2 1 */
{ { 0x3f800000 },{ 0x40400000 },{ 0x3f800000 } }, /* 1 3 1 */
{ { 0x3f800000 },{ 0x7f800000 },{ 0x3f800000 } }, /* 1 inf 1 */
{ { 0x3f800000 },{ 0x7fc00000 },{ 0x3f800000 } }, /* 1 nan 1 */
{ { 0x3f800000 },{ 0x80000000 },{ 0x3f800000 } }, /* 1 -0 1 */
{ { 0x3f800000 },{ 0xbf000000 },{ 0x3f800000 } }, /* 1 -0.5 1 */
{ { 0x3f800000 },{ 0xbf800000 },{ 0x3f800000 } }, /* 1 -1 1 */
{ { 0x3f800000 },{ 0xbfc00000 },{ 0x3f800000 } }, /* 1 -1.5 1 */
{ { 0x3f800000 },{ 0xc0000000 },{ 0x3f800000 } }, /* 1 -2 1 */
{ { 0x3f800000 },{ 0xc0400000 },{ 0x3f800000 } }, /* 1 -3 1 */
{ { 0x3f800000 },{ 0xff800000 },{ 0x3f800000 } }, /* 1 -inf 1 */
{ { 0xbf800000 },{ 0x00000000 },{ 0x3f800000 } }, /* -1 0 1 */
{ { 0xbf800000 },{ 0x3f000000 },{ 0xffc00000 } }, /* -1 0.5 nan */
{ { 0xbf800000 },{ 0x3f800000 },{ 0xbf800000 } }, /* -1 1 -1 */
{ { 0xbf800000 },{ 0x3fc00000 },{ 0xffc00000 } }, /* -1 1.5 nan */
{ { 0xbf800000 },{ 0x40000000 },{ 0x3f800000 } }, /* -1 2 1 */
{ { 0xbf800000 },{ 0x40400000 },{ 0xbf800000 } }, /* -1 3 -1 */
{ { 0xbf800000 },{ 0x7f800000 },{ 0x3f800000 } }, /* -1 inf 1 */
{ { 0xbf800000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* -1 nan nan */
{ { 0xbf800000 },{ 0x80000000 },{ 0x3f800000 } }, /* -1 -0 1 */
{ { 0xbf800000 },{ 0xbf000000 },{ 0xffc00000 } }, /* -1 -0.5 nan */
{ { 0xbf800000 },{ 0xbf800000 },{ 0xbf800000 } }, /* -1 -1 -1 */
{ { 0xbf800000 },{ 0xbfc00000 },{ 0xffc00000 } }, /* -1 -1.5 nan */
{ { 0xbf800000 },{ 0xc0000000 },{ 0x3f800000 } }, /* -1 -2 1 */
{ { 0xbf800000 },{ 0xc0400000 },{ 0xbf800000 } }, /* -1 -3 -1 */
{ { 0xbf800000 },{ 0xff800000 },{ 0x3f800000 } }, /* -1 -inf 1 */
{ { 0x3fc00000 },{ 0x00000000 },{ 0x3f800000 } }, /* 1.5 0 1 */
{ { 0x3fc00000 },{ 0x3f000000 },{ 0x3f9cc471 } }, /* 1.5 0.5 1.22 */
{ { 0x3fc00000 },{ 0x3f800000 },{ 0x3fc00000 } }, /* 1.5 1 1.5 */
{ { 0x3fc00000 },{ 0x3fc00000 },{ 0x3feb26a9 } }, /* 1.5 1.5 1.84 */
{ { 0x3fc00000 },{ 0x40000000 },{ 0x40100000 } }, /* 1.5 2 2.25 */
{ { 0x3fc00000 },{ 0x40400000 },{ 0x40580000 } }, /* 1.5 3 3.38 */
{ { 0x3fc00000 },{ 0x7f800000 },{ 0x7f800000 } }, /* 1.5 inf inf */
{ { 0x3fc00000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* 1.5 nan nan */
{ { 0x3fc00000 },{ 0x80000000 },{ 0x3f800000 } }, /* 1.5 -0 1 */
{ { 0x3fc00000 },{ 0xbf000000 },{ 0x3f5105ec } }, /* 1.5 -0.5 0.816 */
{ { 0x3fc00000 },{ 0xbf800000 },{ 0x3f2aaaab } }, /* 1.5 -1 0.667 */
{ { 0x3fc00000 },{ 0xbfc00000 },{ 0x3f0b5948 } }, /* 1.5 -1.5 0.544 */
{ { 0x3fc00000 },{ 0xc0000000 },{ 0x3ee38e39 } }, /* 1.5 -2 0.444 */
{ { 0x3fc00000 },{ 0xc0400000 },{ 0x3e97b426 } }, /* 1.5 -3 0.296 */
{ { 0x3fc00000 },{ 0xff800000 },{ 0x00000000 } }, /* 1.5 -inf 0 */
{ { 0xbfc00000 },{ 0x00000000 },{ 0x3f800000 } }, /* -1.5 0 1 */
{ { 0xbfc00000 },{ 0x3f000000 },{ 0xffc00000 } }, /* -1.5 0.5 nan */
{ { 0xbfc00000 },{ 0x3f800000 },{ 0xbfc00000 } }, /* -1.5 1 -1.5 */
{ { 0xbfc00000 },{ 0x3fc00000 },{ 0xffc00000 } }, /* -1.5 1.5 nan */
{ { 0xbfc00000 },{ 0x40000000 },{ 0x40100000 } }, /* -1.5 2 2.25 */
{ { 0xbfc00000 },{ 0x40400000 },{ 0xc0580000 } }, /* -1.5 3 -3.38 */
{ { 0xbfc00000 },{ 0x7f800000 },{ 0x7f800000 } }, /* -1.5 inf inf */
{ { 0xbfc00000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* -1.5 nan nan */
{ { 0xbfc00000 },{ 0x80000000 },{ 0x3f800000 } }, /* -1.5 -0 1 */
{ { 0xbfc00000 },{ 0xbf000000 },{ 0xffc00000 } }, /* -1.5 -0.5 nan */
{ { 0xbfc00000 },{ 0xbf800000 },{ 0xbf2aaaab } }, /* -1.5 -1 -0.667 */
{ { 0xbfc00000 },{ 0xbfc00000 },{ 0xffc00000 } }, /* -1.5 -1.5 nan */
{ { 0xbfc00000 },{ 0xc0000000 },{ 0x3ee38e39 } }, /* -1.5 -2 0.444 */
{ { 0xbfc00000 },{ 0xc0400000 },{ 0xbe97b426 } }, /* -1.5 -3 -0.296 */
{ { 0xbfc00000 },{ 0xff800000 },{ 0x00000000 } }, /* -1.5 -inf 0 */
{ { 0x40000000 },{ 0x00000000 },{ 0x3f800000 } }, /* 2 0 1 */
{ { 0x40000000 },{ 0x3f000000 },{ 0x3fb504f3 } }, /* 2 0.5 1.41 */
{ { 0x40000000 },{ 0x3f800000 },{ 0x40000000 } }, /* 2 1 2 */
{ { 0x40000000 },{ 0x3fc00000 },{ 0x403504f3 } }, /* 2 1.5 2.83 */
{ { 0x40000000 },{ 0x40000000 },{ 0x40800000 } }, /* 2 2 4 */
{ { 0x40000000 },{ 0x40400000 },{ 0x41000000 } }, /* 2 3 8 */
{ { 0x40000000 },{ 0x7f800000 },{ 0x7f800000 } }, /* 2 inf inf */
{ { 0x40000000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* 2 nan nan */
{ { 0x40000000 },{ 0x80000000 },{ 0x3f800000 } }, /* 2 -0 1 */
{ { 0x40000000 },{ 0xbf000000 },{ 0x3f3504f3 } }, /* 2 -0.5 0.707 */
{ { 0x40000000 },{ 0xbf800000 },{ 0x3f000000 } }, /* 2 -1 0.5 */
{ { 0x40000000 },{ 0xbfc00000 },{ 0x3eb504f3 } }, /* 2 -1.5 0.354 */
{ { 0x40000000 },{ 0xc0000000 },{ 0x3e800000 } }, /* 2 -2 0.25 */
{ { 0x40000000 },{ 0xc0400000 },{ 0x3e000000 } }, /* 2 -3 0.125 */
{ { 0x40000000 },{ 0xff800000 },{ 0x00000000 } }, /* 2 -inf 0 */
{ { 0xc0000000 },{ 0x00000000 },{ 0x3f800000 } }, /* -2 0 1 */
{ { 0xc0000000 },{ 0x3f000000 },{ 0xffc00000 } }, /* -2 0.5 nan */
{ { 0xc0000000 },{ 0x3f800000 },{ 0xc0000000 } }, /* -2 1 -2 */
{ { 0xc0000000 },{ 0x3fc00000 },{ 0xffc00000 } }, /* -2 1.5 nan */
{ { 0xc0000000 },{ 0x40000000 },{ 0x40800000 } }, /* -2 2 4 */
{ { 0xc0000000 },{ 0x40400000 },{ 0xc1000000 } }, /* -2 3 -8 */
{ { 0xc0000000 },{ 0x7f800000 },{ 0x7f800000 } }, /* -2 inf inf */
{ { 0xc0000000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* -2 nan nan */
{ { 0xc0000000 },{ 0x80000000 },{ 0x3f800000 } }, /* -2 -0 1 */
{ { 0xc0000000 },{ 0xbf000000 },{ 0xffc00000 } }, /* -2 -0.5 nan */
{ { 0xc0000000 },{ 0xbf800000 },{ 0xbf000000 } }, /* -2 -1 -0.5 */
{ { 0xc0000000 },{ 0xbfc00000 },{ 0xffc00000 } }, /* -2 -1.5 nan */
{ { 0xc0000000 },{ 0xc0000000 },{ 0x3e800000 } }, /* -2 -2 0.25 */
{ { 0xc0000000 },{ 0xc0400000 },{ 0xbe000000 } }, /* -2 -3 -0.125 */
{ { 0xc0000000 },{ 0xff800000 },{ 0x00000000 } }, /* -2 -inf 0 */
{ { 0x40400000 },{ 0x00000000 },{ 0x3f800000 } }, /* 3 0 1 */
{ { 0x40400000 },{ 0x3f000000 },{ 0x3fddb3d7 } }, /* 3 0.5 1.73 */
{ { 0x40400000 },{ 0x3f800000 },{ 0x40400000 } }, /* 3 1 3 */
{ { 0x40400000 },{ 0x3fc00000 },{ 0x40a646e1 } }, /* 3 1.5 5.2 */
{ { 0x40400000 },{ 0x40000000 },{ 0x41100000 } }, /* 3 2 9 */
{ { 0x40400000 },{ 0x40400000 },{ 0x41d80000 } }, /* 3 3 27 */
{ { 0x40400000 },{ 0x7f800000 },{ 0x7f800000 } }, /* 3 inf inf */
{ { 0x40400000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* 3 nan nan */
{ { 0x40400000 },{ 0x80000000 },{ 0x3f800000 } }, /* 3 -0 1 */
{ { 0x40400000 },{ 0xbf000000 },{ 0x3f13cd3a } }, /* 3 -0.5 0.577 */
{ { 0x40400000 },{ 0xbf800000 },{ 0x3eaaaaab } }, /* 3 -1 0.333 */
{ { 0x40400000 },{ 0xbfc00000 },{ 0x3e4511a3 } }, /* 3 -1.5 0.192 */
{ { 0x40400000 },{ 0xc0000000 },{ 0x3de38e39 } }, /* 3 -2 0.111 */
{ { 0x40400000 },{ 0xc0400000 },{ 0x3d17b426 } }, /* 3 -3 0.037 */
{ { 0x40400000 },{ 0xff800000 },{ 0x00000000 } }, /* 3 -inf 0 */
{ { 0xc0400000 },{ 0x00000000 },{ 0x3f800000 } }, /* -3 0 1 */
{ { 0xc0400000 },{ 0x3f000000 },{ 0xffc00000 } }, /* -3 0.5 nan */
{ { 0xc0400000 },{ 0x3f800000 },{ 0xc0400000 } }, /* -3 1 -3 */
{ { 0xc0400000 },{ 0x3fc00000 },{ 0xffc00000 } }, /* -3 1.5 nan */
{ { 0xc0400000 },{ 0x40000000 },{ 0x41100000 } }, /* -3 2 9 */
{ { 0xc0400000 },{ 0x40400000 },{ 0xc1d80000 } }, /* -3 3 -27 */
{ { 0xc0400000 },{ 0x7f800000 },{ 0x7f800000 } }, /* -3 inf inf */
{ { 0xc0400000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* -3 nan nan */
{ { 0xc0400000 },{ 0x80000000 },{ 0x3f800000 } }, /* -3 -0 1 */
{ { 0xc0400000 },{ 0xbf000000 },{ 0xffc00000 } }, /* -3 -0.5 nan */
{ { 0xc0400000 },{ 0xbf800000 },{ 0xbeaaaaab } }, /* -3 -1 -0.333 */
{ { 0xc0400000 },{ 0xbfc00000 },{ 0xffc00000 } }, /* -3 -1.5 nan */
{ { 0xc0400000 },{ 0xc0000000 },{ 0x3de38e39 } }, /* -3 -2 0.111 */
{ { 0xc0400000 },{ 0xc0400000 },{ 0xbd17b426 } }, /* -3 -3 -0.037 */
{ { 0xc0400000 },{ 0xff800000 },{ 0x00000000 } }, /* -3 -inf 0 */
{ { 0x7f800000 },{ 0x00000000 },{ 0x3f800000 } }, /* inf 0 1 */
{ { 0x7f800000 },{ 0x3f000000 },{ 0x7f800000 } }, /* inf 0.5 inf */
{ { 0x7f800000 },{ 0x3f800000 },{ 0x7f800000 } }, /* inf 1 inf */
{ { 0x7f800000 },{ 0x3fc00000 },{ 0x7f800000 } }, /* inf 1.5 inf */
{ { 0x7f800000 },{ 0x40000000 },{ 0x7f800000 } }, /* inf 2 inf */
{ { 0x7f800000 },{ 0x40400000 },{ 0x7f800000 } }, /* inf 3 inf */
{ { 0x7f800000 },{ 0x7f800000 },{ 0x7f800000 } }, /* inf inf inf */
{ { 0x7f800000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* inf nan nan */
{ { 0x7f800000 },{ 0x80000000 },{ 0x3f800000 } }, /* inf -0 1 */
{ { 0x7f800000 },{ 0xbf000000 },{ 0x00000000 } }, /* inf -0.5 0 */
{ { 0x7f800000 },{ 0xbf800000 },{ 0x00000000 } }, /* inf -1 0 */
{ { 0x7f800000 },{ 0xbfc00000 },{ 0x00000000 } }, /* inf -1.5 0 */
{ { 0x7f800000 },{ 0xc0000000 },{ 0x00000000 } }, /* inf -2 0 */
{ { 0x7f800000 },{ 0xc0400000 },{ 0x00000000 } }, /* inf -3 0 */
{ { 0x7f800000 },{ 0xff800000 },{ 0x00000000 } }, /* inf -inf 0 */
{ { 0xff800000 },{ 0x00000000 },{ 0x3f800000 } }, /* -inf 0 1 */
{ { 0xff800000 },{ 0x3f000000 },{ 0x7f800000 } }, /* -inf 0.5 inf */
{ { 0xff800000 },{ 0x3f800000 },{ 0xff800000 } }, /* -inf 1 -inf */
{ { 0xff800000 },{ 0x3fc00000 },{ 0x7f800000 } }, /* -inf 1.5 inf */
{ { 0xff800000 },{ 0x40000000 },{ 0x7f800000 } }, /* -inf 2 inf */
{ { 0xff800000 },{ 0x40400000 },{ 0xff800000 } }, /* -inf 3 -inf */
{ { 0xff800000 },{ 0x7f800000 },{ 0x7f800000 } }, /* -inf inf inf */
{ { 0xff800000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* -inf nan nan */
{ { 0xff800000 },{ 0x80000000 },{ 0x3f800000 } }, /* -inf -0 1 */
{ { 0xff800000 },{ 0xbf000000 },{ 0x00000000 } }, /* -inf -0.5 0 */
{ { 0xff800000 },{ 0xbf800000 },{ 0x80000000 } }, /* -inf -1 -0 */
{ { 0xff800000 },{ 0xbfc00000 },{ 0x00000000 } }, /* -inf -1.5 0 */
{ { 0xff800000 },{ 0xc0000000 },{ 0x00000000 } }, /* -inf -2 0 */
{ { 0xff800000 },{ 0xc0400000 },{ 0x80000000 } }, /* -inf -3 -0 */
{ { 0xff800000 },{ 0xff800000 },{ 0x00000000 } }, /* -inf -inf 0 */
{ { 0x7fc00000 },{ 0x00000000 },{ 0x3f800000 } }, /* nan 0 1 */
{ { 0x7fc00000 },{ 0x3f000000 },{ 0x7fc00000 } }, /* nan 0.5 nan */
{ { 0x7fc00000 },{ 0x3f800000 },{ 0x7fc00000 } }, /* nan 1 nan */
{ { 0x7fc00000 },{ 0x3fc00000 },{ 0x7fc00000 } }, /* nan 1.5 nan */
{ { 0x7fc00000 },{ 0x40000000 },{ 0x7fc00000 } }, /* nan 2 nan */
{ { 0x7fc00000 },{ 0x40400000 },{ 0x7fc00000 } }, /* nan 3 nan */
{ { 0x7fc00000 },{ 0x7f800000 },{ 0x7fc00000 } }, /* nan inf nan */
{ { 0x7fc00000 },{ 0x7fc00000 },{ 0x7fc00000 } }, /* nan nan nan */
{ { 0x7fc00000 },{ 0x80000000 },{ 0x3f800000 } }, /* nan -0 1 */
{ { 0x7fc00000 },{ 0xbf000000 },{ 0x7fc00000 } }, /* nan -0.5 nan */
{ { 0x7fc00000 },{ 0xbf800000 },{ 0x7fc00000 } }, /* nan -1 nan */
{ { 0x7fc00000 },{ 0xbfc00000 },{ 0x7fc00000 } }, /* nan -1.5 nan */
{ { 0x7fc00000 },{ 0xc0000000 },{ 0x7fc00000 } }, /* nan -2 nan */
{ { 0x7fc00000 },{ 0xc0400000 },{ 0x7fc00000 } }, /* nan -3 nan */
{ { 0x7fc00000 },{ 0xff800000 },{ 0x7fc00000 } }, /* nan -inf nan */
};
void x_exit (int index)
{
#ifndef __AVR__
fprintf (stderr, "t[%d]: %#lx\n", index - 1, v.lo);
#endif
exit (index ? index : -1);
}
int main ()
{
union lofl_u x,y,z;
int i;
for (i = 0; i < (int) (sizeof(t) / sizeof(t[0])); i++) {
y.lo = pgm_read_dword (& t[i].y);
x.lo = pgm_read_dword (& t[i].x);
z.lo = pgm_read_dword (& t[i].z);
v.fl = pow (x.fl, y.fl);
/* Comparison is integer to verify the zero sign. */
if ( (v.lo == z.lo)
|| (isnan(v.fl) && isnan(z.fl)) )
continue;
if ( isfinite(v.fl)
&& isfinite(z.fl)
&& !((v.lo ^ z.lo) & 0x80000000) /* signbit(v) == signbit(z) */
&& labs(v.lo - z.lo) <= 4 )
continue;
x_exit (i+1);
}
return 0;
}
|