| 418 | |
| 419 | ATTRIBUTE_CONST |
| 420 | static inline long double |
| 421 | simple_round (long double val, enum round_type t) |
| 422 | { |
| 423 | intmax_t rval; |
| 424 | intmax_t intmax_mul = val / INTMAX_MAX; |
| 425 | val -= (long double) INTMAX_MAX * intmax_mul; |
| 426 | |
| 427 | switch (t) |
| 428 | { |
| 429 | case round_ceiling: |
| 430 | rval = simple_round_ceiling (val); |
| 431 | break; |
| 432 | |
| 433 | case round_floor: |
| 434 | rval = simple_round_floor (val); |
| 435 | break; |
| 436 | |
| 437 | case round_from_zero: |
| 438 | rval = simple_round_from_zero (val); |
| 439 | break; |
| 440 | |
| 441 | case round_to_zero: |
| 442 | rval = simple_round_to_zero (val); |
| 443 | break; |
| 444 | |
| 445 | case round_nearest: |
| 446 | rval = simple_round_nearest (val); |
| 447 | break; |
| 448 | |
| 449 | default: |
| 450 | /* to silence the compiler - this should never happen. */ |
| 451 | return 0; |
| 452 | } |
| 453 | |
| 454 | return (long double) INTMAX_MAX * intmax_mul + rval; |
| 455 | } |
| 456 | |
| 457 | enum simple_strtod_error |
| 458 | { |
no test coverage detected