|
587 | 587 | (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffep-1)) (f64.const 0x1.fffffffffffffp-1))
|
588 | 588 | (assert_return (invoke "f64.sqrt" (f64.const 0x1.ffffffffffffdp-1)) (f64.const 0x1.ffffffffffffep-1))
|
589 | 589 |
|
| 590 | +;; Test the values of sqrt around ¼, where `sqrt(x) - x` is greatest. |
| 591 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.fffffep-3)) (f32.const 0x1.fffffep-2)) |
| 592 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1p-2)) (f32.const 0x1p-1)) |
| 593 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.000002p-2)) (f32.const 0x1p-1)) |
| 594 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.000004p-2)) (f32.const 0x1.000002p-1)) |
| 595 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.fffffffffffffp-3)) (f64.const 0x1.fffffffffffffp-2)) |
| 596 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1p-2)) (f64.const 0x1p-1)) |
| 597 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000001p-2)) (f64.const 0x1p-1)) |
| 598 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0000000000002p-2)) (f64.const 0x1.0000000000001p-1)) |
| 599 | + |
| 600 | +;; Test some values that in some systems differ between CPU and DSP. |
| 601 | +;; https://e2e.ti.com/support/processors-group/processors/f/processors-forum/30725/sqrt-function-gives-slightly-different-results---may-be-rounding-problem |
| 602 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.fb41d4p+37)) (f32.const 0x1.fd9f8p+18)) |
| 603 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.fb41d442eeb1bp+37)) (f64.const 0x1.fd9f808a0b68dp+18)) |
| 604 | + |
| 605 | +;; Test some values that in some systems differ between CPU and GPU. |
| 606 | +;; https://forums.developer.nvidia.com/t/sqrt-precision/18597 |
| 607 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.3c61b2p+33)) (f32.const 0x1.927ap+16)) |
| 608 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.56bd4ep+51)) (f32.const 0x1.a2e80cp+25)) |
| 609 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.65f02cp+44)) (f32.const 0x1.2eb544p+22)) |
| 610 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.26580cp+30)) (f32.const 0x1.1280d6p+15)) |
| 611 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.3c61b112p+33)) (f64.const 0x1.927ap+16)) |
| 612 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.56bd4e65c8548p+51)) (f64.const 0x1.a2e80dp+25)) |
| 613 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.65f02cc93a1p+44)) (f64.const 0x1.2eb544p+22)) |
| 614 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.26580b4cp+30)) (f64.const 0x1.1280d62b818cfp+15)) |
| 615 | + |
| 616 | +;; Test some values that in some systems differ between CPU and GPU. |
| 617 | +;; https://github.com/pytorch/pytorch/issues/31250 |
| 618 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.0817fcp-1)) (f32.const 0x1.6fb79ep-1)) |
| 619 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.017b98p-1)) (f32.const 0x1.6b15eep-1)) |
| 620 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.0817fcp-1)) (f64.const 0x1.6fb79d0dfaffap-1)) |
| 621 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.017b98p-1)) (f64.const 0x1.6b15ed0071b95p-1)) |
| 622 | + |
| 623 | +;; Test that sqrt is not a "good enough" approximation. |
| 624 | +;; https://sicp.sourceacademy.org/chapters/1.1.7.html |
| 625 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.2p+3)) (f32.const 0x1.8p+1)) |
| 626 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.12p+7)) (f32.const 0x1.768ce6p+3)) |
| 627 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.c615dep+0)) (f32.const 0x1.54f2dp+0)) |
| 628 | +(assert_return (invoke "f32.sqrt" (f32.const 0x1.f4p+9)) (f32.const 0x1.f9f6e4p+4)) |
| 629 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.2p+3)) (f64.const 0x1.8p+1)) |
| 630 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.12p+7)) (f64.const 0x1.768ce6d3c11ep+3)) |
| 631 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.c615df07a57d3p+0)) (f64.const 0x1.54f2d015acf09p+0)) |
| 632 | +(assert_return (invoke "f64.sqrt" (f64.const 0x1.f4p+9)) (f64.const 0x1.f9f6e4990f227p+4)) |
| 633 | + |
590 | 634 | ;; Test that the bitwise floating point operators are bitwise on NaN.
|
591 | 635 |
|
592 | 636 | (assert_return (invoke "f32.abs" (f32.const nan:0x0f1e2)) (f32.const nan:0x0f1e2))
|
|
0 commit comments