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 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504
|
(* TEST *)
(* modified glibc's fma() tests *)
let string_of_fpclass = function
| Float.FP_normal -> "normal"
| FP_subnormal -> "subnormal"
| FP_zero -> "zero"
| FP_infinite -> "infinite"
| FP_nan -> "nan"
let error l x y z r c =
Printf.fprintf stdout
"%s FAIL!\tfma (%h, %h, %h) returned %h (%s) instead of %h.\n"
l x y z c (string_of_fpclass (Float.classify_float c))
(List.hd r)
let success l =
Printf.fprintf stdout "%s OK!\n" l
let fma_test l x y z r =
let c = Float.fma x y z in
if List.exists (fun i -> i = c) r
then success l
else error l x y z r c
(* test case description:
(string * float * float * float * float list)
| | | | |
id | | | IEEE compliant result in head,
| | | or, accepted fma emulation approximation
| | | results in tail (if any)
| | |
x y z -> operands as in fma x y z
*)
let _ =
let cases = [
("001", 0x1p+0, 0x2p+0, 0x3p+0, [0x5p+0]);
("002", 0x1.4p+0, 0xcp-4, 0x1p-4, [0x1p+0]);
("003", 0x0p+0, 0x0p+0, 0x0p+0, [0x0p+0]);
("004", 0x0p+0, 0x0p+0, ~-.0x0p+0, [0x0p+0]);
("005", 0x0p+0, ~-.0x0p+0, 0x0p+0, [0x0p+0]);
("006", 0x0p+0, ~-.0x0p+0, ~-.0x0p+0, [~-.0x0p+0]);
("007", ~-.0x0p+0, 0x0p+0, 0x0p+0, [0x0p+0]);
("008", ~-.0x0p+0, 0x0p+0, ~-.0x0p+0, [~-.0x0p+0]);
("009", ~-.0x0p+0, ~-.0x0p+0, 0x0p+0, [0x0p+0]);
("010", ~-.0x0p+0, ~-.0x0p+0, ~-.0x0p+0, [0x0p+0]);
("011", 0x1p+0, 0x0p+0, 0x0p+0, [0x0p+0]);
("012", 0x1p+0, 0x0p+0, ~-.0x0p+0, [0x0p+0]);
("013", 0x1p+0, ~-.0x0p+0, 0x0p+0, [0x0p+0]);
("014", 0x1p+0, ~-.0x0p+0, ~-.0x0p+0, [~-.0x0p+0]);
("015", ~-.0x1p+0, 0x0p+0, 0x0p+0, [0x0p+0]);
("016", ~-.0x1p+0, 0x0p+0, ~-.0x0p+0, [~-.0x0p+0]);
("017", ~-.0x1p+0, ~-.0x0p+0, 0x0p+0, [0x0p+0]);
("018", ~-.0x1p+0, ~-.0x0p+0, ~-.0x0p+0, [0x0p+0]);
("019", 0x0p+0, 0x1p+0, 0x0p+0, [0x0p+0]);
("020", 0x0p+0, 0x1p+0, ~-.0x0p+0, [0x0p+0]);
("021", 0x0p+0, ~-.0x1p+0, 0x0p+0, [0x0p+0]);
("022", 0x0p+0, ~-.0x1p+0, ~-.0x0p+0, [~-.0x0p+0]);
("023", ~-.0x0p+0, 0x1p+0, 0x0p+0, [0x0p+0]);
("024", ~-.0x0p+0, 0x1p+0, ~-.0x0p+0, [~-.0x0p+0]);
("025", ~-.0x0p+0, ~-.0x1p+0, 0x0p+0, [0x0p+0]);
("026", ~-.0x0p+0, ~-.0x1p+0, ~-.0x0p+0, [0x0p+0]);
("027", 0x1p+0, 0x1p+0, ~-.0x1p+0, [0x0p+0]);
("028", 0x1p+0, ~-.0x1p+0, 0x1p+0, [0x0p+0]);
("029", ~-.0x1p+0, 0x1p+0, 0x1p+0, [0x0p+0]);
("030", ~-.0x1p+0, ~-.0x1p+0, ~-.0x1p+0, [0x0p+0]);
("031", 0x0p+0, 0x0p+0, 0x1p+0, [0x1p+0]);
("032", 0x0p+0, 0x0p+0, 0x2p+0, [0x2p+0]);
("033", 0x0p+0, 0x0p+0, 0xf.fffffp+124, [0xf.fffffp+124]);
("034", 0x0p+0, 0x0p+0, 0xf.ffffffffffff8p+1020,
[0xf.ffffffffffff8p+1020]);
("035", 0x0p+0, 0x1p+0, 0x1p+0, [0x1p+0]);
("036", 0x1p+0, 0x0p+0, 0x1p+0, [0x1p+0]);
("037", 0x0p+0, 0x1p+0, 0x2p+0, [0x2p+0]);
("038", 0x1p+0, 0x0p+0, 0x2p+0, [0x2p+0]);
("039", 0x0p+0, 0x1p+0, 0xf.fffffp+124, [0xf.fffffp+124]);
("040", 0x0p+0, 0x1p+0, 0xf.ffffffffffff8p+1020,
[0xf.ffffffffffff8p+1020]);
("041", 0x1p+0, 0x0p+0, 0xf.fffffp+124, [0xf.fffffp+124]);
("042", 0x1p+0, 0x0p+0, 0xf.ffffffffffff8p+1020,
[0xf.ffffffffffff8p+1020]);
("043", 0x4p-128, 0x4p-128, 0x0p+0, [0x1p-252]);
("044", 0x4p-128, 0x4p-1024, 0x0p+0, [0x0p+0]);
("045", 0x4p-128, 0x8p-972, 0x0p+0, [0x0p+0]);
("046", 0x4p-1024, 0x4p-128, 0x0p+0, [0x0p+0]);
("047", 0x4p-1024, 0x4p-1024, 0x0p+0, [0x0p+0]);
("048", 0x4p-1024, 0x8p-972, 0x0p+0, [0x0p+0]);
("049", 0x8p-972, 0x4p-128, 0x0p+0, [0x0p+0]);
("050", 0x8p-972, 0x4p-1024, 0x0p+0, [0x0p+0]);
("051", 0x8p-972, 0x8p-972, 0x0p+0, [0x0p+0]);
("052", 0x4p-128, 0x4p-128, ~-.0x0p+0, [0x1p-252]);
("053", 0x4p-128, 0x4p-1024, ~-.0x0p+0, [0x0p+0]);
("054", 0x4p-128, 0x8p-972, ~-.0x0p+0, [0x0p+0]);
("055", 0x4p-1024, 0x4p-128, ~-.0x0p+0, [0x0p+0]);
("056", 0x4p-1024, 0x4p-1024, ~-.0x0p+0, [0x0p+0]);
("057", 0x4p-1024, 0x8p-972, ~-.0x0p+0, [0x0p+0]);
("058", 0x8p-972, 0x4p-128, ~-.0x0p+0, [0x0p+0]);
("059", 0x8p-972, 0x4p-1024, ~-.0x0p+0, [0x0p+0]);
("060", 0x8p-972, 0x8p-972, ~-.0x0p+0, [0x0p+0]);
("061", 0x4p-128, ~-.0x4p-128, 0x0p+0, [~-.0x1p-252]);
("062", 0x4p-128, ~-.0x4p-1024, 0x0p+0, [~-.0x0p+0]);
("063", 0x4p-128, ~-.0x8p-972, 0x0p+0, [~-.0x0p+0]);
("064", 0x4p-1024, ~-.0x4p-128, 0x0p+0, [~-.0x0p+0]);
("065", 0x4p-1024, ~-.0x4p-1024, 0x0p+0, [~-.0x0p+0]);
("066", 0x4p-1024, ~-.0x8p-972, 0x0p+0, [~-.0x0p+0]);
("067", 0x8p-972, ~-.0x4p-128, 0x0p+0, [~-.0x0p+0]);
("068", 0x8p-972, ~-.0x4p-1024, 0x0p+0, [~-.0x0p+0]);
("069", 0x8p-972, ~-.0x8p-972, 0x0p+0, [~-.0x0p+0]);
("070", 0x4p-128, ~-.0x4p-128, ~-.0x0p+0, [~-.0x1p-252]);
("071", 0x4p-128, ~-.0x4p-1024, ~-.0x0p+0, [~-.0x0p+0]);
("072", 0x4p-128, ~-.0x8p-972, ~-.0x0p+0, [~-.0x0p+0]);
("073", 0x4p-1024, ~-.0x4p-128, ~-.0x0p+0, [~-.0x0p+0]);
("074", 0x4p-1024, ~-.0x4p-1024, ~-.0x0p+0, [~-.0x0p+0]);
("075", 0x4p-1024, ~-.0x8p-972, ~-.0x0p+0, [~-.0x0p+0]);
("076", 0x8p-972, ~-.0x4p-128, ~-.0x0p+0, [~-.0x0p+0]);
("077", 0x8p-972, ~-.0x4p-1024, ~-.0x0p+0, [~-.0x0p+0]);
("078", 0x8p-972, ~-.0x8p-972, ~-.0x0p+0, [~-.0x0p+0]);
("079", ~-.0x4p-128, 0x4p-128, 0x0p+0, [~-.0x1p-252]);
("080", ~-.0x4p-128, 0x4p-1024, 0x0p+0, [~-.0x0p+0]);
("081", ~-.0x4p-128, 0x8p-972, 0x0p+0, [~-.0x0p+0]);
("082", ~-.0x4p-1024, 0x4p-128, 0x0p+0, [~-.0x0p+0]);
("083", ~-.0x4p-1024, 0x4p-1024, 0x0p+0, [~-.0x0p+0]);
("084", ~-.0x4p-1024, 0x8p-972, 0x0p+0, [~-.0x0p+0]);
("085", ~-.0x8p-972, 0x4p-128, 0x0p+0, [~-.0x0p+0]);
("086", ~-.0x8p-972, 0x4p-1024, 0x0p+0, [~-.0x0p+0]);
("087", ~-.0x8p-972, 0x8p-972, 0x0p+0, [~-.0x0p+0]);
("088", ~-.0x4p-128, 0x4p-128, ~-.0x0p+0, [~-.0x1p-252]);
("089", ~-.0x4p-128, 0x4p-1024, ~-.0x0p+0, [~-.0x0p+0]);
("090", ~-.0x4p-128, 0x8p-972, ~-.0x0p+0, [~-.0x0p+0]);
("091", ~-.0x4p-1024, 0x4p-128, ~-.0x0p+0, [~-.0x0p+0]);
("092", ~-.0x4p-1024, 0x4p-1024, ~-.0x0p+0, [~-.0x0p+0]);
("093", ~-.0x4p-1024, 0x8p-972, ~-.0x0p+0, [~-.0x0p+0]);
("094", ~-.0x8p-972, 0x4p-128, ~-.0x0p+0, [~-.0x0p+0]);
("095", ~-.0x8p-972, 0x4p-1024, ~-.0x0p+0, [~-.0x0p+0]);
("096", ~-.0x8p-972, 0x8p-972, ~-.0x0p+0, [~-.0x0p+0]);
("097", ~-.0x4p-128, ~-.0x4p-128, 0x0p+0, [0x1p-252]);
("098", ~-.0x4p-128, ~-.0x4p-1024, 0x0p+0, [0x0p+0]);
("099", ~-.0x4p-128, ~-.0x8p-972, 0x0p+0, [0x0p+0]);
("100", ~-.0x4p-1024, ~-.0x4p-128, 0x0p+0, [0x0p+0]);
("101", ~-.0x4p-1024, ~-.0x4p-1024, 0x0p+0, [0x0p+0]);
("102", ~-.0x4p-1024, ~-.0x8p-972, 0x0p+0, [0x0p+0]);
("103", ~-.0x8p-972, ~-.0x4p-128, 0x0p+0, [0x0p+0]);
("104", ~-.0x8p-972, ~-.0x4p-1024, 0x0p+0, [0x0p+0]);
("105", ~-.0x8p-972, ~-.0x8p-972, 0x0p+0, [0x0p+0]);
("106", ~-.0x4p-128, ~-.0x4p-128, ~-.0x0p+0, [0x1p-252]);
("107", ~-.0x4p-128, ~-.0x4p-1024, ~-.0x0p+0, [0x0p+0]);
("108", ~-.0x4p-128, ~-.0x8p-972, ~-.0x0p+0, [0x0p+0]);
("109", ~-.0x4p-1024, ~-.0x4p-128, ~-.0x0p+0, [0x0p+0]);
("110", ~-.0x4p-1024, ~-.0x4p-1024, ~-.0x0p+0, [0x0p+0]);
("111", ~-.0x4p-1024, ~-.0x8p-972, ~-.0x0p+0, [0x0p+0]);
("112", ~-.0x8p-972, ~-.0x4p-128, ~-.0x0p+0, [0x0p+0]);
("113", ~-.0x8p-972, ~-.0x4p-1024, ~-.0x0p+0, [0x0p+0]);
("114", ~-.0x8p-972, ~-.0x8p-972, ~-.0x0p+0, [0x0p+0]);
("115", 0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128, [0xf.ffffe000001p+252]);
("116", 0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024,
[0xf.ffffe000001p+252]);
("117", 0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972, [0xf.ffffe000001p+252]);
("118", 0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128, [infinity]);
("119", 0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024, [infinity]);
("120", 0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972, [infinity]);
("121", 0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128, [infinity]);
("122", 0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024, [infinity]);
("123", 0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972, [infinity]);
("124", 0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128,
[infinity]);
("125", 0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024,
[infinity]);
("126", 0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972,
[infinity]);
("127", 0xf.fffffp+124, 0xf.fffffp+124, ~-.0x4p-128,
[0xf.ffffe000001p+252]);
("128", 0xf.fffffp+124, 0xf.fffffp+124, ~-.0x4p-1024,
[0xf.ffffe000001p+252]);
("129", 0xf.fffffp+124, 0xf.fffffp+124, ~-.0x8p-972,
[0xf.ffffe000001p+252]);
("130", 0xf.fffffp+124, 0xf.ffffffffffff8p+1020, ~-.0x4p-128, [infinity]);
("131", 0xf.fffffp+124, 0xf.ffffffffffff8p+1020, ~-.0x4p-1024,
[infinity]);
("132", 0xf.fffffp+124, 0xf.ffffffffffff8p+1020, ~-.0x8p-972, [infinity]);
("133", 0xf.ffffffffffff8p+1020, 0xf.fffffp+124, ~-.0x4p-128, [infinity]);
("134", 0xf.ffffffffffff8p+1020, 0xf.fffffp+124, ~-.0x4p-1024,
[infinity]);
("135", 0xf.ffffffffffff8p+1020, 0xf.fffffp+124, ~-.0x8p-972, [infinity]);
("136", 0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, ~-.0x4p-128,
[infinity]);
("137", 0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, ~-.0x4p-1024,
[infinity]);
("138", 0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, ~-.0x8p-972,
[infinity]);
("139", 0xf.fffffp+124, ~-.0xf.fffffp+124, 0x4p-128,
[~-.0xf.ffffe000001p+252]);
("140", 0xf.fffffp+124, ~-.0xf.fffffp+124, 0x4p-1024,
[~-.0xf.ffffe000001p+252]);
("141", 0xf.fffffp+124, ~-.0xf.fffffp+124, 0x8p-972,
[~-.0xf.ffffe000001p+252]);
("142", 0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, 0x4p-128,
[~-.infinity]);
("143", 0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, 0x4p-1024,
[~-.infinity]);
("144", 0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, 0x8p-972,
[~-.infinity]);
("145", 0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, 0x4p-128,
[~-.infinity]);
("146", 0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, 0x4p-1024,
[~-.infinity]);
("147", 0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, 0x8p-972,
[~-.infinity]);
("148", 0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, 0x4p-128,
[~-.infinity]);
("149", 0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, 0x4p-1024,
[~-.infinity]);
("150", 0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, 0x8p-972,
[~-.infinity]);
("151", 0xf.fffffp+124, ~-.0xf.fffffp+124, ~-.0x4p-128,
[~-.0xf.ffffe000001p+252]);
("152", 0xf.fffffp+124, ~-.0xf.fffffp+124, ~-.0x4p-1024,
[~-.0xf.ffffe000001p+252]);
("153", 0xf.fffffp+124, ~-.0xf.fffffp+124, ~-.0x8p-972,
[~-.0xf.ffffe000001p+252]);
("154", 0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, ~-.0x4p-128,
[~-.infinity]);
("155", 0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, ~-.0x4p-1024,
[~-.infinity]);
("156", 0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, ~-.0x8p-972,
[~-.infinity]);
("157", 0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, ~-.0x4p-128,
[~-.infinity]);
("158", 0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, ~-.0x4p-1024,
[~-.infinity]);
("159", 0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, ~-.0x8p-972,
[~-.infinity]);
("160", 0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, ~-.0x4p-128,
[~-.infinity]);
("161", 0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, ~-.0x4p-1024,
[~-.infinity]);
("162", 0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, ~-.0x8p-972,
[~-.infinity]);
("163", ~-.0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128,
[~-.0xf.ffffe000001p+252]);
("164", ~-.0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024,
[~-.0xf.ffffe000001p+252]);
("165", ~-.0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972,
[~-.0xf.ffffe000001p+252]);
("166", ~-.0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128,
[~-.infinity]);
("167", ~-.0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024,
[~-.infinity]);
("168", ~-.0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972,
[~-.infinity]);
("169", ~-.0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128,
[~-.infinity]);
("170", ~-.0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024,
[~-.infinity]);
("171", ~-.0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972,
[~-.infinity]);
("172", ~-.0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128,
[~-.infinity]);
("173", ~-.0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024,
[~-.infinity]);
("174", ~-.0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972,
[~-.infinity]);
("175", ~-.0xf.fffffp+124, 0xf.fffffp+124, ~-.0x4p-128,
[~-.0xf.ffffe000001p+252]);
("176", ~-.0xf.fffffp+124, 0xf.fffffp+124, ~-.0x4p-1024,
[~-.0xf.ffffe000001p+252]);
("177", ~-.0xf.fffffp+124, 0xf.fffffp+124, ~-.0x8p-972,
[~-.0xf.ffffe000001p+252]);
("178", ~-.0xf.fffffp+124, 0xf.ffffffffffff8p+1020, ~-.0x4p-128,
[~-.infinity]);
("179", ~-.0xf.fffffp+124, 0xf.ffffffffffff8p+1020, ~-.0x4p-1024,
[~-.infinity]);
("180", ~-.0xf.fffffp+124, 0xf.ffffffffffff8p+1020, ~-.0x8p-972,
[~-.infinity]);
("181", ~-.0xf.ffffffffffff8p+1020, 0xf.fffffp+124, ~-.0x4p-128,
[~-.infinity]);
("182", ~-.0xf.ffffffffffff8p+1020, 0xf.fffffp+124, ~-.0x4p-1024,
[~-.infinity]);
("183", ~-.0xf.ffffffffffff8p+1020, 0xf.fffffp+124, ~-.0x8p-972,
[~-.infinity]);
("184", ~-.0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, ~-.0x4p-128,
[~-.infinity]);
("185", ~-.0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, ~-.0x4p-1024,
[~-.infinity]);
("186", ~-.0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, ~-.0x8p-972,
[~-.infinity]);
("187", ~-.0xf.fffffp+124, ~-.0xf.fffffp+124, 0x4p-128,
[0xf.ffffe000001p+252]);
("188", ~-.0xf.fffffp+124, ~-.0xf.fffffp+124, 0x4p-1024,
[0xf.ffffe000001p+252]);
("189", ~-.0xf.fffffp+124, ~-.0xf.fffffp+124, 0x8p-972,
[0xf.ffffe000001p+252]);
("190", ~-.0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, 0x4p-128,
[infinity]);
("191", ~-.0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, 0x4p-1024,
[infinity]);
("192", ~-.0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, 0x8p-972,
[infinity]);
("193", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, 0x4p-128,
[infinity]);
("194", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, 0x4p-1024,
[infinity]);
("195", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, 0x8p-972,
[infinity]);
("196", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, 0x4p-128,
[infinity]);
("197", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, 0x4p-1024,
[infinity]);
("198", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020, 0x8p-972,
[infinity]);
("199", ~-.0xf.fffffp+124, ~-.0xf.fffffp+124, ~-.0x4p-128,
[0xf.ffffe000001p+252]);
("200", ~-.0xf.fffffp+124, ~-.0xf.fffffp+124, ~-.0x4p-1024,
[0xf.ffffe000001p+252]);
("201", ~-.0xf.fffffp+124, ~-.0xf.fffffp+124, ~-.0x8p-972,
[0xf.ffffe000001p+252]);
("202", ~-.0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, ~-.0x4p-128,
[infinity]);
("203", ~-.0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, ~-.0x4p-1024,
[infinity]);
("204", ~-.0xf.fffffp+124, ~-.0xf.ffffffffffff8p+1020, ~-.0x8p-972,
[infinity]);
("205", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, ~-.0x4p-128,
[infinity]);
("206", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, ~-.0x4p-1024,
[infinity]);
("207", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.fffffp+124, ~-.0x8p-972,
[infinity]);
("208", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020,
~-.0x4p-128, [infinity]);
("209", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020,
~-.0x4p-1024, [infinity]);
("210", ~-.0xf.ffffffffffff8p+1020, ~-.0xf.ffffffffffff8p+1020,
~-.0x8p-972, [infinity]);
("211", 0x2.fffp+12, 0x1.000002p+0, 0x1.ffffp-24, [0x2.fff006p+12]);
("212", 0x1.fffp+0, 0x1.00001p+0, ~-.0x1.fffp+0, [0x1.fffp-20]);
("213", 0xc.d5e6fp+124, 0x2.6af378p-128, ~-.0x1.f08948p+0,
[0xd.da108p-28]);
("214", 0x1.9abcdep+100, 0x2.6af378p-128, ~-.0x3.e1129p-28,
[0x1.bb421p-52]);
("215", 0xf.fffffp+124, 0x1.001p+0, ~-.0xf.fffffp+124, [0xf.fffffp+112]);
("216", ~-.0xf.fffffp+124, 0x1.fffffep+0, 0xf.fffffp+124,
[~-.0xf.ffffd000002p+124]);
("217", 0xf.fffffp+124, 0x2p+0, ~-.0xf.fffffp+124, [0xf.fffffp+124]);
("218", 0x5p-128, 0x8.00002p-4, 0x1p-128, [0x3.80000ap-128]);
("219", ~-.0x5p-128, 0x8.00002p-4, ~-.0x1p-128, [~-.0x3.80000ap-128]);
("220", 0x7.ffffep-128, 0x8.00001p-4, 0x8p-152, [0x3.ffffffffffep-128]);
("221", ~-.0x7.ffffep-128, 0x8.00001p-4, ~-.0x8p-152,
[~-.0x3.ffffffffffep-128]);
("222", 0x8p-152, 0x8p-4, 0x3.fffff8p-128, [0x3.fffffcp-128]);
("223", ~-.0x8p-152, 0x8p-4, ~-.0x3.fffff8p-128, [~-.0x3.fffffcp-128]);
("224", 0x8p-152, 0x8.8p-4, 0x3.fffff8p-128, [0x3.fffffc4p-128]);
("225", ~-.0x8p-152, 0x8.8p-4, ~-.0x3.fffff8p-128, [~-.0x3.fffffc4p-128]);
("226", 0x8p-152, 0x8p-152, 0x8p+124, [0x8p+124]);
("227", 0x8p-152, ~-.0x8p-152, 0x8p+124, [0x8p+124]);
("228", 0x8p-152, 0x8p-152, ~-.0x8p+124, [~-.0x8p+124]);
("229", 0x8p-152, ~-.0x8p-152, ~-.0x8p+124, [~-.0x8p+124]);
("230", 0x8p-152, 0x8p-152, 0x4p-128, [0x4p-128]);
("231", 0x8p-152, ~-.0x8p-152, 0x4p-128, [0x4p-128]);
("232", 0x8p-152, 0x8p-152, ~-.0x4p-128, [~-.0x4p-128]);
("233", 0x8p-152, ~-.0x8p-152, ~-.0x4p-128, [~-.0x4p-128]);
("234", 0x8p-152, 0x8p-152, 0x3.fffff8p-128, [0x3.fffff8p-128]);
("235", 0x8p-152, ~-.0x8p-152, 0x3.fffff8p-128, [0x3.fffff8p-128]);
("236", 0x8p-152, 0x8p-152, ~-.0x3.fffff8p-128, [~-.0x3.fffff8p-128]);
("237", 0x8p-152, ~-.0x8p-152, ~-.0x3.fffff8p-128, [~-.0x3.fffff8p-128]);
("238", 0x8p-152, 0x8p-152, 0x8p-152, [0x8p-152]);
("239", 0x8p-152, ~-.0x8p-152, 0x8p-152, [0x8p-152]);
("240", 0x8p-152, 0x8p-152, ~-.0x8p-152, [~-.0x8p-152]);
("241", 0x8p-152, ~-.0x8p-152, ~-.0x8p-152, [~-.0x8p-152]);
("242", 0xf.ffp-4, 0xf.ffp-4, ~-.0xf.fep-4, [0x1p-24]);
("243", 0xf.ffp-4, ~-.0xf.ffp-4, 0xf.fep-4, [~-.0x1p-24]);
("244", ~-.0xf.ffp-4, 0xf.ffp-4, 0xf.fep-4, [~-.0x1p-24]);
("245", ~-.0xf.ffp-4, ~-.0xf.ffp-4, ~-.0xf.fep-4, [0x1p-24]);
("246", 0x4.000008p-128, 0x4.000008p-28, 0x8p+124, [0x8p+124]);
("247", 0x4.000008p-128, ~-.0x4.000008p-28, 0x8p+124, [0x8p+124]);
("248", 0x4.000008p-128, 0x4.000008p-28, ~-.0x8p+124, [~-.0x8p+124]);
("249", 0x4.000008p-128, ~-.0x4.000008p-28, ~-.0x8p+124, [~-.0x8p+124]);
("250", 0x4.000008p-128, 0x4.000008p-28, 0x8p+100, [0x8p+100]);
("251", 0x4.000008p-128, ~-.0x4.000008p-28, 0x8p+100, [0x8p+100]);
("252", 0x4.000008p-128, 0x4.000008p-28, ~-.0x8p+100, [~-.0x8p+100]);
("253", 0x4.000008p-128, ~-.0x4.000008p-28, ~-.0x8p+100, [~-.0x8p+100]);
("254", 0x2.fep+12, 0x1.0000000000001p+0, 0x1.ffep-48,
[0x2.fe00000000002p+12; 0x1.7f00000000002p+13]);
("255", 0x1.fffp+0, 0x1.0000000000001p+0, ~-.0x1.fffp+0,
[0x1.fffp-52; 0x1p-51]);
("256", 0x1.0000002p+0, 0xf.fffffep-4, 0x1p-300, [0x1p+0]);
("257", 0x1.0000002p+0, 0xf.fffffep-4, ~-.0x1p-300,
[0xf.ffffffffffff8p-4; 0x1p+0]);
("258", 0xe.f56df7797f768p+1020, 0x3.7ab6fbbcbfbb4p-1024,
~-.0x3.40bf1803497f6p+0,
[0x8.4c4b43de4ed2p-56; 0x1.095f287bc9da4p-53; 0x1.098p-53]);
("259", 0x1.deadbeef2feedp+900, 0x3.7ab6fbbcbfbb4p-1024,
~-.0x6.817e300692fecp-124,
[0x1.0989687bc9da4p-176; 0x1.095f287bc9da4p-176; 0x1.098p-176]);
("260", 0xf.ffffffffffff8p+1020, 0x1.001p+0,
~-.0xf.ffffffffffff8p+1020, [0xf.ffffffffffff8p+1008; 0x1p+1012]);
("261", ~-.0xf.ffffffffffff8p+1020, 0x1.fffffffffffffp+0,
0xf.ffffffffffff8p+1020, [~-.0xf.fffffffffffe8p+1020]);
("262", 0xf.ffffffffffff8p+1020, 0x2p+0, ~-.0xf.ffffffffffff8p+1020,
[0xf.ffffffffffff8p+1020]);
("263", 0x5.a827999fcef3p-540, 0x5.a827999fcef3p-540, 0x0p+0, [0x0p+0]);
("264", 0x3.bd5b7dde5fddap-496, 0x3.bd5b7dde5fddap-496,
~-.0xd.fc352bc352bap-992,
[0x1.0989687cp-1044; 0x0.000004277ca1fp-1022; 0x0.00000428p-1022]);
("265", 0x3.bd5b7dde5fddap-504, 0x3.bd5b7dde5fddap-504,
~-.0xd.fc352bc352bap-1008,
[0x1.0988p-1060; 0x0.0000000004278p-1022; 0x0.000000000428p-1022]);
("266", 0x8p-540, 0x4p-540, 0x4p-1076, [0x8p-1076]);
("267", 0x1.7fffff8p-968, 0x4p-108, 0x4p-1048,
[0x4.0000004p-1048; 0x0.0000010000002p-1022]);
("268", 0x2.8000008p-968, 0x4p-108, 0x4p-1048,
[0x4.000000cp-1048; 0x0.0000010000002p-1022]);
("269", 0x2.8p-968, ~-.0x4p-108, ~-.0x4p-1048, [~-.0x4.0000008p-1048]);
("270", ~-.0x2.33956cdae7c2ep-960, 0x3.8e211518bfea2p-108,
~-.0x2.02c2b59766d9p-1024, [~-.0x2.02c2b59767564p-1024]);
("271", ~-.0x3.a5d5dadd1d3a6p-980, ~-.0x2.9c0cd8c5593bap-64,
~-.0x2.49179ac00d15p-1024, [~-.0x2.491702717ed74p-1024]);
("272", 0x2.2a7aca1773e0cp-908, 0x9.6809186a42038p-128,
~-.0x2.c9e356b3f0fp-1024,
[~-.0x2.c89d5c48eefa4p-1024; ~-.0x0.b22757123bbe8p-1022]);
("273", ~-.0x3.ffffffffffffep-712, 0x3.ffffffffffffep-276,
0x3.fffffc0000ffep-984, [0x2.fffffc0000ffep-984; 0x1.7ffffe00008p-983]);
("274", 0x5p-1024, 0x8.000000000001p-4, 0x1p-1024,
[0x3.8000000000004p-1024]);
("275", ~-.0x5p-1024, 0x8.000000000001p-4, ~-.0x1p-1024,
[~-.0x3.8000000000004p-1024]);
("276", 0x7.ffffffffffffp-1024, 0x8.0000000000008p-4, 0x4p-1076,
[0x4p-1024]);
("277", ~-.0x7.ffffffffffffp-1024, 0x8.0000000000008p-4, ~-.0x4p-1076,
[~-.0x4p-1024]);
("278", 0x4p-1076, 0x8p-4, 0x3.ffffffffffffcp-1024, [0x4p-1024]);
("279", ~-.0x4p-1076, 0x8p-4, ~-.0x3.ffffffffffffcp-1024, [~-.0x4p-1024]);
("280", 0x4p-1076, 0x8.8p-4, 0x3.ffffffffffffcp-1024, [0x4p-1024]);
("281", ~-.0x4p-1076, 0x8.8p-4, ~-.0x3.ffffffffffffcp-1024,
[~-.0x4p-1024]);
("282", 0x4p-1076, 0x4p-1076, 0x8p+1020, [0x8p+1020]);
("283", 0x4p-1076, ~-.0x4p-1076, 0x8p+1020, [0x8p+1020]);
("284", 0x4p-1076, 0x4p-1076, ~-.0x8p+1020, [~-.0x8p+1020]);
("285", 0x4p-1076, ~-.0x4p-1076, ~-.0x8p+1020, [~-.0x8p+1020]);
("286", 0x4p-1076, 0x4p-1076, 0x4p-1024, [0x4p-1024]);
("287", 0x4p-1076, ~-.0x4p-1076, 0x4p-1024, [0x4p-1024]);
("288", 0x4p-1076, 0x4p-1076, ~-.0x4p-1024, [~-.0x4p-1024]);
("289", 0x4p-1076, ~-.0x4p-1076, ~-.0x4p-1024, [~-.0x4p-1024]);
("290", 0x4p-1076, 0x4p-1076, 0x3.ffffffffffffcp-1024,
[0x3.ffffffffffffcp-1024]);
("291", 0x4p-1076, ~-.0x4p-1076, 0x3.ffffffffffffcp-1024,
[0x3.ffffffffffffcp-1024]);
("292", 0x4p-1076, 0x4p-1076, ~-.0x3.ffffffffffffcp-1024,
[~-.0x3.ffffffffffffcp-1024]);
("293", 0x4p-1076, ~-.0x4p-1076, ~-.0x3.ffffffffffffcp-1024,
[~-.0x3.ffffffffffffcp-1024]);
("294", 0x4p-1076, 0x4p-1076, 0x4p-1076, [0x4p-1076]);
("295", 0x4p-1076, ~-.0x4p-1076, 0x4p-1076, [0x4p-1076]);
("296", 0x4p-1076, 0x4p-1076, ~-.0x4p-1076, [~-.0x4p-1076]);
("297", 0x4p-1076, ~-.0x4p-1076, ~-.0x4p-1076, [~-.0x4p-1076]);
("298", 0xf.ffffffffffff8p-4, 0xf.ffffffffffff8p-4,
~-.0xf.ffffffffffffp-4, [0x4p-108; 0x0p+0]);
("299", 0xf.ffffffffffff8p-4, ~-.0xf.ffffffffffff8p-4,
0xf.ffffffffffffp-4, [~-.0x4p-108; 0x0p+0]);
("300", ~-.0xf.ffffffffffff8p-4, 0xf.ffffffffffff8p-4,
0xf.ffffffffffffp-4, [~-.0x4p-108; 0x0p+0]);
("301", ~-.0xf.ffffffffffff8p-4, ~-.0xf.ffffffffffff8p-4,
~-.0xf.ffffffffffffp-4, [0x4p-108; 0x0p+0]);
("302", 0x4.0000000000004p-1024, 0x2.0000000000002p-56, 0x8p+1020,
[0x8p+1020]);
("303", 0x4.0000000000004p-1024, ~-.0x2.0000000000002p-56, 0x8p+1020,
[0x8p+1020]);
("304", 0x4.0000000000004p-1024, 0x2.0000000000002p-56, ~-.0x8p+1020,
[~-.0x8p+1020]);
("305", 0x4.0000000000004p-1024, ~-.0x2.0000000000002p-56, ~-.0x8p+1020,
[~-.0x8p+1020]);
("306", 0x4.0000000000004p-1024, 0x2.0000000000002p-56, 0x4p+968,
[0x4p+968]);
("307", 0x4.0000000000004p-1024, ~-.0x2.0000000000002p-56, 0x4p+968,
[0x4p+968]);
("308", 0x4.0000000000004p-1024, 0x2.0000000000002p-56, ~-.0x4p+968,
[~-.0x4p+968]);
("309", 0x4.0000000000004p-1024, ~-.0x2.0000000000002p-56, ~-.0x4p+968,
[~-.0x4p+968]);
("310", 0x7.fffff8p-128, 0x3.fffffcp+24, 0xf.fffffp+124,
[0xf.fffffp+124]);
("311", 0x7.fffff8p-128, ~-.0x3.fffffcp+24, 0xf.fffffp+124,
[0xf.fffffp+124]);
("312", 0x7.fffff8p-128, 0x3.fffffcp+24, ~-.0xf.fffffp+124,
[~-.0xf.fffffp+124]);
("313", 0x7.fffff8p-128, ~-.0x3.fffffcp+24, ~-.0xf.fffffp+124,
[~-.0xf.fffffp+124]);
("314", 0x7.ffffffffffffcp-1024, 0x7.ffffffffffffcp+52,
0xf.ffffffffffff8p+1020, [0xf.ffffffffffff8p+1020]);
("315", 0x7.ffffffffffffcp-1024, ~-.0x7.ffffffffffffcp+52,
0xf.ffffffffffff8p+1020, [0xf.ffffffffffff8p+1020]);
("316", 0x7.ffffffffffffcp-1024, 0x7.ffffffffffffcp+52,
~-.0xf.ffffffffffff8p+1020, [~-.0xf.ffffffffffff8p+1020]);
("317", 0x7.ffffffffffffcp-1024, ~-.0x7.ffffffffffffcp+52,
~-.0xf.ffffffffffff8p+1020, [~-.0xf.ffffffffffff8p+1020])
] in
let rec do_cases c =
match c with
(l, x, y, z, r)::t -> fma_test l x y z r;
do_cases t
| [] -> ()
in
do_cases cases
|