summaryrefslogtreecommitdiff
path: root/lib/math
diff options
context:
space:
mode:
authorS. Gilles <sgilles@math.umd.edu>2018-06-30 03:42:29 -0400
committerS. Gilles <sgilles@math.umd.edu>2018-06-30 04:16:48 -0400
commit0d9b475759f29fc61af8743b3517619eb50c5b6f (patch)
treeb105ede2d98eba9de667c3c171045f44bf137433 /lib/math
parentd7de78142e5a68bce8a951a4567e0621671aab42 (diff)
downloadmc-0d9b475759f29fc61af8743b3517619eb50c5b6f.tar.gz
Add test cases for each C[j] constant for sin/cos.
Diffstat (limited to 'lib/math')
-rw-r--r--lib/math/sin-impl.myr22
-rw-r--r--lib/math/test/sin-impl.myr297
2 files changed, 303 insertions, 16 deletions
diff --git a/lib/math/sin-impl.myr b/lib/math/sin-impl.myr
index 54b640b..f9e8a34 100644
--- a/lib/math/sin-impl.myr
+++ b/lib/math/sin-impl.myr
@@ -487,31 +487,21 @@ const w64 = {x : flt64, want_sin : bool, want_cos : bool
/* Figure out where in the C table x lies */
var j = (rn(x1 * std.flt64frombits(oneohtwofour_over_pi)) : uint64)
var x1u = std.flt64bits(x1)
- var guess_xi
- var test_xi
+ var xi, sin_xi, cos_xi, sin_delta, cos_delta
- /* Adjust j up or down if necessary. */
+ /* We either want j or j - 1. */
j = std.max(std.min(j, 256), 0)
- (guess_xi, _, _) = C[j]
+ (xi, cos_xi, sin_xi) = C[j]
if j > 0
+ var test_xi
(test_xi, _, _) = C[j - 1]
- if std.abs(x1u - test_xi) < std.abs(x1u - guess_xi)
+ if std.abs(x1u - test_xi) < std.abs(x1u - xi)
+ (xi, cos_xi, sin_xi) = C[j - 1]
j--
- guess_xi = test_xi
- ;;
- ;;
-
- if j < 256
- (test_xi, _, _) = C[j + 1]
- if std.abs(x1u - test_xi) < std.abs(x1u - guess_xi)
- j++
;;
;;
- var xi, sin_xi, cos_xi, sin_delta, cos_delta
- (xi, cos_xi, sin_xi) = C[j]
-
/*
Compute x - xi with compensated summation. Because xi
and delta both lie in the same interval of width (pi/4)/256,
diff --git a/lib/math/test/sin-impl.myr b/lib/math/test/sin-impl.myr
index b3ec5d4..588a35c 100644
--- a/lib/math/test/sin-impl.myr
+++ b/lib/math/test/sin-impl.myr
@@ -134,7 +134,304 @@ const sincos03 = {c
}
const sincos04 = {c
+ /*
+ There should be one of these for each j, each corresponding
+ to the appropriate xi. This should ensure that, when
+ upgrading the C tables, things don't get too terribly
+ broken.
+ */
+ var inputs : (uint64, uint64, uint64)[:] = [
+ (0x00000000000000f6, 0x00000000000000f6, 0x3ff0000000000000),
+ (0x512272897288fc3f, 0xbf74c1fa7a394e5a, 0xbfefffe511d2bf60),
+ (0xbf7bf1bf57973983, 0xbf7bf1b122b6a164, 0x3fefffcf31e20334),
+ (0x54b7c50a7a9883cb, 0xbfefff7870aeb34e, 0xbf874920cd9ace22),
+ (0xdace0787a600a1ca, 0x3f8b9ca34b1db23a, 0xbfefff416335fa92),
+ (0x72864769869c2318, 0x3feffeddc1ece35c, 0xbf910931b7190c35),
+ (0xd91723aa83b79cb9, 0xbf942999d22d35b9, 0x3feffe696f1dc7b2),
+ (0x475f423e817765ea, 0x3f96b423c56f5447, 0xbfeffdfc7adf3a9d),
+ (0xe6ea21331235f850, 0xbf9c0c0fa6749f60, 0xbfeffced3639af5a),
+ (0x6d2a3c2098179905, 0xbf9f11a72b55a41b, 0xbfeffc3a7f66553b),
+ (0xf28fa3bd259e1376, 0xbfeffc23303dea74, 0xbf9f71111b7fd616),
+ (0x7f26be7ff1138291, 0xbfa185023632479d, 0xbfeffb33e657eb59),
+ (0x675c32e626080a1e, 0x3feff9b5b177af51, 0xbfa40f7a6e6b7994),
+ (0x52924d2cbb5901d1, 0x3fa48c4b82d66c9b, 0x3feff9666f07db89),
+ (0x417ec533964706ec, 0x3fa64f235d1be278, 0x3feff83843b411af),
+ (0x52107ea0ff1110db, 0xbfeff6a3fc169867, 0x3fa877b2347f0a28),
+ (0xd71b728c627f815d, 0x3faa8d784340586e, 0xbfeff4f9ef7c5107),
+ (0xda739024569252ce, 0x3feff3eee1e5663a, 0x3fabc79919273897),
+ (0xdb96494b55f3f081, 0xbfeff24bb7274d9e, 0x3fad9a5e1c7820a2),
+ (0x739f3c2a746a1b50, 0xbfeff19570cd1d86, 0x3fae5c932d2f3605),
+ (0x447aa716086a8c88, 0xbfb05ec5a49745a1, 0x3fefef3bdef16841),
+ (0xf968280b3a414e54, 0xbfb12ed0ae4aeb09, 0xbfefed86a66a999f),
+ (0xd02fb5bd9a62c870, 0x3fefebdb551c9f8e, 0x3fb1f1029914d91e),
+ (0x60ffe411eafbc6da, 0x3fb245acb57399e6, 0x3fefeb1b39d132e8),
+ (0x4f318e7d4aea96dc, 0xbfefe7f62e48f0eb, 0x3fb398e0aeb9c445),
+ (0xc404978c116309d8, 0x3fb423d6b3b85040, 0x3fefe69c043f3e90),
+ (0x43f2630170779582, 0x3fb5177a797d0e87, 0xbfefe4261d504451),
+ (0x5fdbbf61f00b7f03, 0xbfefe38d527600ca, 0xbfb550ed5bee6d60),
+ (0xc0197a1d458871ce, 0xbfb6018646c93b7b, 0x3fefe1ad70c7618a),
+ (0xfec0c7c70c5fef38, 0xbfb72b204c19e155, 0xbfefde61e65655a4),
+ (0x536118c6d0da429d, 0xbfb813122d1d4d33, 0x3fefdbb21abcadb1),
+ (0x468bde452261d739, 0xbfefd95e3ccfcb94, 0x3fb8d51e4332cdff),
+ (0x640531fd736dc271, 0xbfb9cb4924d9690e, 0xbfefd64f7c8c42d5),
+ (0x45882463c54dff4d, 0x3fba4eb0d809a756, 0xbfefd4a15a83accd),
+ (0xe47b0287f9f402c4, 0x3fbb4f875473f88e, 0xbfefd13fe58f7d94),
+ (0x776a9cb59bc714b1, 0x3fefd05ef4cb673b, 0x3fbb90bc6355a021),
+ (0x6e03d54eae350b2b, 0x3fbc40e4b1fc64b5, 0x3fefcdf4b6ba3d60),
+ (0xd7e13510abfa4b8f, 0xbfbd8c17b8daf635, 0x3fefc9408a0ed455),
+ (0xf5b0b388d525a652, 0x3fbe06c30febf5ed, 0xbfefc774aca78be1),
+ (0xc872046ad7b74e5d, 0xbfefc4762a3df5f2, 0xbfbeceee72729a95),
+ (0xe7de05b2f658e70f, 0xbfbf705c3c62b429, 0xbfefc1fd7092a24b),
+ (0xcc324b95dbc8fd01, 0x3fc0705192fdc54c, 0xbfefbc2939080e96),
+ (0xf721d915cf272a16, 0xbfefbb27b38fdf96, 0xbfc08f4641cf4d68),
+ (0x727b9da90c1b363d, 0x3fefb822c42d1549, 0xbfc0ead5e194ff63),
+ (0x76833092f555af28, 0xbfc16fc26448ec57, 0xbfefb3a2bb1657ce),
+ (0x4aee1902b654832c, 0x3fefb04eed8111ec, 0x3fc1cf8146eca7eb),
+ (0x4baf9ffda9dc11e3, 0x3fefac8684367fbe, 0xbfc239ecfe4bf73d),
+ (0x5657a3059c18f2d9, 0xbfc297363782e038, 0xbfefa922de862569),
+ (0x7bff45dd88b13800, 0xbfc2d478620b4e02, 0xbfefa6df905ff50e),
+ (0x5dee435102358eaf, 0x3fefa1b101e4c684, 0xbfc35dd586187ce4),
+ (0xde9d9f0cc9f77177, 0x3fc3defc1325ae88, 0x3fef9caef7a753cc),
+ (0xfdda28f4488d7a83, 0xbfc415283aea05a2, 0x3fef9a8b282c574d),
+ (0xf50af38a50f30e4c, 0xbfc4730a16260b3b, 0xbfef96c7b1abe323),
+ (0xfb496fa21c023920, 0x3fc4cea2d28cfdfb, 0x3fef930a70b822c6),
+ (0xe505ecdfee427dbd, 0x3fc554226a887900, 0x3fef8d78b9f34b72),
+ (0xeb0d8c0df28dd71b, 0x3fc5b337c0fb9e5e, 0xbfef896b2289c5b2),
+ (0x7509b2527112fd5b, 0xbfc630b105366287, 0x3fef83f5ac088905),
+ (0xffd6c9165e18ac33, 0x3fef81c853e8136a, 0xbfc661f1ad0ce950),
+ (0xe1c86c04b0706291, 0xbfef7d873a6519fe, 0x3fc6c0f2cce48329),
+ (0x7f4ab100fd15ade5, 0x3fc7148e0c9e3182, 0x3fef79b97d3d745b),
+ (0x4b1f0b0b22dfeef3, 0xbfc7c4eeb85ba3ff, 0x3fef718430c69651),
+ (0xcb9bb37fc0f2a235, 0xbfc7d6435e271ea1, 0x3fef70b2445b8479),
+ (0xd6e8414566d4c52e, 0xbfef6a8b61c9b366, 0x3fc856b04dcf03ea),
+ (0xe79fb9553990f8be, 0xbfef64d85f36d000, 0xbfc8cb42fe24375f),
+ (0x6dcb241574906b9f, 0x3fc9451b9809f028, 0x3fef5ec551a7ce80),
+ (0xd35310f2b682fb52, 0x3fc976452c4ba67d, 0x3fef5c492d13c71d),
+ (0x49b456519453bc2e, 0xbfef5770a5a4ac32, 0x3fc9d50bf14496e0),
+ (0x59d7185ea4188d7a, 0x3fca6cd56e57cc8a, 0xbfef4f86fdc2aa14),
+ (0xfddefd05372bf5b1, 0xbfca83aa03c4c548, 0x3fef4e52288add54),
+ (0x7b7322413d2ae5f8, 0x3fef46fc203fc847, 0xbfcb0ccdf3f26a28),
+ (0x6360cbf4cc0e423a, 0xbfcb8abc4d3fbf70, 0xbfef401cf3b2c8ad),
+ (0xc2ef40aac8c0caff, 0xbfef3b40e2b1c574, 0x3fcbe2633bec6338),
+ (0xc2ef40aac8c0caff, 0xbfef3b40e2b1c574, 0x3fcbe2633bec6338),
+ (0x7517b932422321b3, 0xbfcc7c0a66359b8f, 0x3fef329516485b7e),
+ (0x4d40e5da1750b47b, 0x3fccecafe584ca7a, 0x3fef2c1a191c72da),
+ (0xd3eeab6f1ce0c65f, 0x3fef275dde80b9a5, 0xbfcd3ddea87ad082),
+ (0x7332b1c80505c25d, 0x3fcdd243aeac42e6, 0xbfef1e91f34d9e70),
+ (0xdd7f47ace75b1278, 0xbfef1ba6ee071cfd, 0x3fce02d275470464),
+ (0xf6deca320321040f, 0x3fef1188ee0ff435, 0xbfcea8b76971a173),
+ (0xde7018284f03e03f, 0x3fef0acf75273337, 0x3fcf14f3f457127c),
+ (0x5a35f121d3d2a2e7, 0x3fcf3fb1a0b5d9eb, 0x3fef0820c67c621a),
+ (0x5f8789fe1295b431, 0xbfcf801328302267, 0xbfef040f08a74b86),
+ (0xeb60edaa99fb631b, 0xbfcff6c4e0ab7ecf, 0xbfeefc7723cce8e8),
+ (0x740043f1ff2cdc39, 0x3feef58264f03ec2, 0xbfd030f4ca52cdfd),
+ (0x755909d7a66ec123, 0x3fd05b0aacb3547b, 0xbfeeeffa179a7126),
+ (0xce7378a1c330830a, 0xbfd092eb3679cee6, 0xbfeee889fe5671b2),
+ (0x61229f2e883ad502, 0x3feee354dcbf5384, 0xbfd0b993622b89d8),
+ (0xc308cff80474c43c, 0x3fd0f14e25183c0c, 0xbfeedbbc1b54a4a4),
+ (0x5474ef4a0497c293, 0x3fd11f8458f1b696, 0xbfeed55af85d48b3),
+ (0x64a85b58557d81d6, 0xbfd16ead3eb9741d, 0xbfeeca421433b493),
+ (0xf77724543b8b3885, 0x3fd19ed46e8f52e9, 0x3feec36716fdec27),
+ (0x464183db1f445d09, 0x3feec26f93025caa, 0xbfd1a593925c8dc8),
+ (0x778eae02a44000a2, 0xbfeebb73eb5aed84, 0x3fd1d5fba8930f8f),
+ (0x5cdc5f4b5e0d1940, 0xbfd224373cb42c70, 0x3feeafff121ff829),
+ (0x525e3d38881ed63d, 0x3feea6cd7f0438c8, 0xbfd261f9b2e4fa14),
+ (0x5a10e8f3294cb8da, 0xbfeea58f1791757a, 0x3fd26a434e6e77e4),
+ (0x4fc23cca0a71ea3a, 0x3fee9b1b63dc509c, 0x3fd2af49e08c3126),
+ (0xf60fe4b87e3c1da9, 0xbfd2d96cd21892d2, 0xbfee94a51d4d7187),
+ (0xf57c4045e43ccaf9, 0xbfee8e15317f07be, 0x3fd303ce72c3ddcb),
+ (0xfbba53b7ccff6358, 0xbfd337ace7d8abf2, 0x3fee85f74296d316),
+ (0x7c92ab74e6d83f53, 0x3fee7e33cfcfc9c9, 0x3fd368bac190b88b),
+ (0x6aa52ba172654ed1, 0x3fd3a3c7bd76153b, 0x3fee74be8564f496),
+ (0x5c6e0f3ec20f8e7d, 0x3fee6c801bff99d9, 0x3fd3d6a1b9e825a9),
+ (0x44438c0b81cf287e, 0xbfd3f7fb8049f941, 0xbfee670b3f6d116a),
+ (0xe9eeb63337ece529, 0x3fd42bb1af27955a, 0x3fee5e814f8fa4ee),
+ (0xd05cf079494581b4, 0xbfee58a3bd5aaaad, 0x3fd44ee2b0defb88),
+ (0x685f1a87b750f254, 0xbfd4a144f9e741c4, 0xbfee4abc1dcdf720),
+ (0x536b65af59fbc622, 0x3fee477e3635fcdf, 0x3fd4b4458e9e69ef),
+ (0xdd2564daf3c4e467, 0x3fd4f0c8e7efe5da, 0xbfee3d15289f8043),
+ (0x7fa52667c976d82e, 0xbfee3a08ee598072, 0xbfd5025b4e066b88),
+ (0x72f883ad82e4a3ba, 0xbfee2fdf26ce794e, 0xbfd53c7e2146d269),
+ (0xf6e835bc9adeaf59, 0xbfd57c6ac4883fb5, 0x3fee248e035dacb0),
+ (0x42ea8e91bba3889d, 0x3fee202b02dd668d, 0xbfd594f8cca01aba),
+ (0x58b1d3f25c054d48, 0x3fee179309c7e2fe, 0xbfd5c4b8add182bf),
+ (0xe9e2cd65f67e2ee0, 0xbfee0dd7bea36726, 0x3fd5fa3dc3a4f8c7),
+ (0x6b9ffac3db03a107, 0x3fd631fb285e219d, 0xbfee039865991e53),
+ (0x6eb4d607fe115dcf, 0x3fedfa4b939ca0ac, 0x3fd66409024e6323),
+ (0xf7917095f9a51925, 0xbfd69796d53fd17f, 0xbfedf09e862de5d1),
+ (0x7118f8c15e2991c4, 0x3fedeb8848f6cf5b, 0xbfd6b27ba1696913),
+ (0x79b55f3637cc4586, 0xbfd6f5638f450935, 0x3feddec291264c5d),
+ (0x5fd1cfe5b08757a6, 0xbfd70ffb893ab566, 0x3fedd9a2fedb6c24),
+ (0xc733503522b5f461, 0xbfd7554c3b69eebf, 0xbfedcc2869cbf541),
+ (0x446d7c038f34a64a, 0x3fedc88bba34e66a, 0x3fd767b74c87b19e),
+ (0xc3a23c3b9032b8f3, 0x3fd79831044581c9, 0xbfedbefa4c29de60),
+ (0xc48d690c9e9f2305, 0xbfd7e8fd81ac1776, 0xbfedaed4c0b2b8f3),
+ (0x6936ad82b0657c14, 0x3fd7f3be25e63b3f, 0xbfedaca9dc90a41b),
+ (0x4d4c51754594c5a7, 0xbfed9c8f1505a0bd, 0xbfd842f47bbbff65),
+ (0x53af975d069ceebf, 0x3fed98ae77ed0af4, 0xbfd855d9e1b87671),
+ (0xbfd929812210b263, 0xbfd884d5b1521b6a, 0x3fed8efb1e579d8f),
+ (0xf311b32b3a68939e, 0xbfed856f902db836, 0xbfd8b2aaa6160a9f),
+ (0xc8bb45b934289a6f, 0xbfd8e9ef0de3dc36, 0xbfed79d12674cd54),
+ (0xcf7f65187e57f8e0, 0x3fed6bc8263fc275, 0x3fd92bf37a97badc),
+ (0xc8e046f199566a7b, 0x3fed61acdd8efca5, 0x3fd95aff9d017381),
+ (0xe63586b4c42da14f, 0x3fd992a9570938bd, 0xbfed559aec9c0440),
+ (0x7570d9f0f3faa4e7, 0x3fed51bace294110, 0xbfd9a46a32ec9b5d),
+ (0xf6bb3c9916ba9b7b, 0x3fed454543bc2de4, 0x3fd9dd1b108a60cc),
+ (0xd660ed6e55136cdf, 0x3fed37afb7050a25, 0x3fda1a4302c68bf6),
+ (0x429a8fa0df460917, 0x3fed2f17f136daf1, 0xbfda409a52187af7),
+ (0xebf471a9b1b6caa5, 0xbfda64f02f41d321, 0x3fed26e544de1649),
+ (0xe65e21ead3c2ba60, 0xbfed22498d657c09, 0x3fda7942a404499c),
+ (0x6ae3d5db498749f6, 0xbfed0e459db364cf, 0xbfdad0af537af3fc),
+ (0x76bc0ffdf6576c1d, 0xbfdaf074aec69954, 0xbfed06ebcd22c8e7),
+ (0x576061576fcdadfd, 0x3fecfe0996e5d249, 0x3fdb169da2f019c9),
+ (0xe9922b0dd12503ba, 0x3fdb3e68e31cf5d6, 0x3fecf4b5b421be75),
+ (0xf090512b08c64f2b, 0x3fece4479edc03c5, 0xbfdb83d63f9cb587),
+ (0xc9064cce58144c06, 0x3fdbb290774db3ef, 0x3fecd91bf6c9a299),
+ (0xd2c65def3f53a9b7, 0x3fdbd52702603513, 0x3fecd0c83afda1b0),
+ (0xc366379b9a957cdb, 0x3fdc01b0c4b0e4d4, 0x3fecc5fc650dfa55),
+ (0x739d5edf97b83065, 0xbfdc2b7a687242b7, 0x3fecbbc7dbedc827),
+ (0xc40021d66b2f4d61, 0xbfdc4d9c4f8f51e7, 0xbfecb363f1bca281),
+ (0xc76aa2fdbe146487, 0x3feca866fe836c4e, 0xbfdc7a02cee3d6de),
+ (0x7738dad760be3d56, 0xbfec9933d62aa560, 0xbfdcb6e1350e6fb2),
+ (0x666928445c6724e3, 0xbfec91c8c33109d5, 0x3fdcd45bdedee292),
+ (0xc1a41b02da9ba0ea, 0x3fec863b137bd6e1, 0x3fdd01fa8ac7aa24),
+ (0x7848fe3e78cb663c, 0xbfec79f540706d37, 0x3fdd320e30bad112),
+ (0x5be9ac5535d046cc, 0xbfdd69dbc3730780, 0x3fec6b965f72d6d9),
+ (0x7d00750f7493ec14, 0x3fec63edee9d4c7e, 0x3fdd8761eaf89474),
+ (0x70b08a0803a2e4f7, 0x3fddab0ae8940bb3, 0x3fec5aa10a89a08b),
+ (0x55fbd54cc4be5f3c, 0x3fdddcb4a70293c4, 0x3fec4d956bba1326),
+ (0xf3554e8402f6265a, 0x3fde1f406db596ad, 0xbfec3beecfce2cf7),
+ (0xd1c4f6c0576b4ceb, 0x3fde321eb7b4e647, 0x3fec36e47718b312),
+ (0x7d59507f71b8f889, 0xbfec27de7468cb95, 0x3fde6a02a16464fe),
+ (0xdc7e5afce57e9cd7, 0x3fdea90fe172c6c6, 0xbfec16c09e490bad),
+ (0xeb073e7d1af5222d, 0xbfdec9544c37d497, 0xbfec0dec6f134e6c),
+ (0xc60882772b865dc5, 0x3fec07c509e4da5b, 0x3fdedfb80fb87768),
+ (0x75dc9fbbd1640b6a, 0xbfebf854a6961d91, 0xbfdf1787a24fb4b4),
+ (0x633901c12d4cb6e1, 0x3fdf4c84cada936a, 0x3febe98a62583ac2),
+ (0x7f04dacd2c2ca8ce, 0xbfebe3a53f98fb9a, 0xbfdf6182e7252bac),
+ (0x4332ecebbe152c9a, 0xbfebd268556dddea, 0xbfdf9e7c5618737b),
+ (0x5ac66c5d9fa15663, 0x3fdfc21149cd81f9, 0x3febc844c23cdafa),
+ (0xc404cdd7bc992e30, 0x3febb629d34f27fa, 0xbfe0008c6d07e1bd),
+ (0xc53d64204fdf1db3, 0xbfebafa459158ca0, 0x3fe00bd23ae3931f),
+ (0xf9d4afa07a8a6ce7, 0xbfeba1a3c12f4839, 0x3fe023e2f03b637d),
+ (0x637f1d1420fea3f8, 0xbfe0448291240078, 0x3feb8e7b76ad81a3),
+ (0x72eae57421307d45, 0xbfeb849a47abb68b, 0x3fe05533525f37a3),
+ (0xc2e6fa2f34fd750b, 0x3feb7482e375b78d, 0xbfe070318df28781),
+ (0x6d7ed298ca67fbc5, 0x3feb65bbbbb39c6c, 0x3fe088c7245680ca),
+ (0x4d744a5ecf95fd93, 0xbfe08d4873b04602, 0xbfeb630334f1eee3),
+ (0xd0b010cb5af6b5b1, 0xbfe0a62065b173bc, 0x3feb53effed8251e),
+ (0xfa89d1a75f768cd0, 0x3feb42d7b90ec7ad, 0x3fe0c20f7c61cec5),
+ (0x6ce2de1511d237eb, 0x3fe0ce8b7293b359, 0xbfeb3b2725681250),
+ (0x56a33b90bd51784c, 0x3fe0e8cc84a7b798, 0x3feb2ae16eac76c8),
+ (0xd998ed50ac13add1, 0x3feb20901b10690f, 0x3fe0f954fc1fd74a),
+ (0xd2573e1a86722c43, 0xbfeb0fa0f7a8064b, 0xbfe114476b668554),
+ (0x498c3881301c9450, 0xbfeafe2803de2552, 0xbfe12fd761d178a8),
+ (0x676028d2e9aa9de4, 0x3feaf378b320bee9, 0xbfe14093da4a17db),
+ (0x4e22da5810e48e2c, 0xbfeae18365d0ce13, 0xbfe15c81b1c187a4),
+ (0xfc2b1173d2f9d7c5, 0x3fe16349ac5ca8bf, 0x3feadd20fb79cee5),
+ (0x7473a4f18d083564, 0xbfe1853ad10a9564, 0x3feac70a53c134e8),
+ (0xfb85676d181e0881, 0xbfe19133a8342b55, 0xbfeabf312f9ba36c),
+ (0x6269a55fd3dcfce2, 0x3fe19f8d1330bb0a, 0xbfeab5befc7864f0),
+ (0x4598ddfdd67bf239, 0x3fea9eb39a3896ce, 0x3fe1c248efe0508e),
+ (0xd95338bde4d930aa, 0xbfe1d9d6772be796, 0x3fea8eee09962254),
+ (0x611503484c027608, 0x3fea8b32e1adee9a, 0xbfe1df6247815710),
+ (0x5c2ee2e8eb412270, 0xbfe1f6da5410afd9, 0x3fea7b56645112df),
+ (0xcb58f3d014fca0aa, 0xbfea66537cfebec2, 0x3fe215acd67cbd00),
+ (0x43c6b36129529847, 0xbfea610121a2376e, 0xbfe21d6f232602fd),
+ (0xfa1614294a9f72c8, 0x3fea49e8d6077dc7, 0x3fe23ee2fa2c432c),
+ (0x473b0851ec7a71fc, 0xbfea3ae9bc9717ab, 0xbfe2546b8f878bb2),
+ (0xf6d74bab0f0688d3, 0x3fe26ad4d6d860df, 0x3fea2b3235d28e02),
+ (0xe9bee3b9d2c67c03, 0xbfe26e2812e3c037, 0x3fea28dacda84df7),
+ (0xcc92e4c94a84e291, 0x3fe285c9915a00bf, 0xbfea1824b911e6c7),
+ (0xf8aab297bc40c6d3, 0xbfe2a8efe687cdd7, 0x3fe9ff0dac00a59e),
+ (0x6bfb68a736eeb1b6, 0x3fe2b1176d2ab489, 0x3fe9f931533ac9e4),
+ (0xcf94cd7e76b5d43b, 0x3fe9eefebc7842b3, 0x3fe2bf3ae0fb4f01),
+ (0x58e19d8279e73d8c, 0x3fe2e269a7c9fff8, 0x3fe9d56b655c37fc),
+ (0x4c2f18aaaae1a9a5, 0x3fe9c6856bb54b0c, 0x3fe2f6ba53166329),
+ (0x4473bbb450eb9885, 0xbfe9bd919cb7c452, 0xbfe302df564ec155),
+ (0x5352f27ad3264f74, 0xbfe3105c54f5cb4c, 0xbfe9b395db2fe1b5),
+ (0xd70c16903457ac91, 0xbfe32d9f9dbb21f9, 0xbfe99dc756e89b3d),
+ (0xcac2e8c8c586b2d1, 0xbfe345aa02d0e659, 0xbfe98bb610c6fd7a),
+ (0x72d7978807cae706, 0xbfe35d2b78fbd0b9, 0x3fe979e9612ca3a5),
+ (0xe6c2f09d247a94a9, 0xbfe36b250c0e3485, 0x3fe96f44150abf2c),
+ (0xfa6723c5149699bc, 0xbfe95f43f91aa66f, 0xbfe380085ac23ee0),
+ (0xff8223b58fd12c2f, 0x3fe94bba9f307406, 0xbfe39959860b58ec),
+ (0x75296e4dd81e95f4, 0x3fe3a3e75e16aa44, 0x3fe94389b95f2efa),
+ (0x7e5b65a329da9204, 0x3fe3c1f15c9eb331, 0xbfe92c12b84a4ade),
+ (0xee3f0726908f6f7e, 0xbfe91cc6ea4e16dc, 0x3fe3d55ed2290c82),
+ (0x7af275b9d87202c4, 0x3fe3d7db0cdad96d, 0x3fe91ad03ab42e84),
+ (0x58404c6817fb0387, 0xbfe3ecf399bb98a3, 0x3fe90a151c0f3a99),
+ (0x4e24e759fc383d3b, 0x3fe8f9c1d2e98eb7, 0xbfe401664bfe107a),
+ (0x6e6e238154fe510b, 0xbfe8dc876efe2cea, 0xbfe425ad5d3088a4),
+ (0x51115721fcb875a5, 0x3fe8ce38b96c431d, 0xbfe4374857dced36),
+ (0xcd0f08fce53215fe, 0x3fe44b7fa906b663, 0x3fe8bdb137695bac),
+ (0xc793de849b92e545, 0x3fe8ae29fd1807b2, 0xbfe45e5f09a79710),
+ (0xf14f3d838006f1f3, 0x3fe8a0e6c0cb53d4, 0xbfe46e665c9bfa98),
+ (0x485b3050ec24e894, 0xbfe89ac1501c4664, 0x3fe475ccc67a5a6f),
+ (0x53cdd772c04825b7, 0xbfe499d932904180, 0xbfe87c9a6ee0e5f4),
+ (0xf3830e1d9fcb8a63, 0x3fe49ee7f784dc34, 0xbfe878583c6d1b17),
+ (0x4fd516dfb479c284, 0xbfe4b8fa646a8702, 0x3fe86247ec1b5405),
+ (0x401c9636ba305733, 0x3fe852f4e454503a, 0x3fe4caf517981ddf),
+ (0x74e6629d161dcdf0, 0x3fe84b4f58913c4f, 0x3fe4d3e3c394b4c3),
+ (0xc831ccafeb5988ca, 0xbfe4e9f00dc7029d, 0x3fe8385704515fc8),
+ (0xea8b6c2e5b7438e9, 0xbfe821d634afb0ed, 0x3fe503e361ffde43),
+ (0x50ddbc2d3d77331b, 0xbfe51e8f21a24dd4, 0xbfe80a82564c99e1),
+ (0xd31f8e19edda2f9a, 0x3fe802894421cfd0, 0x3fe5279f1e05c5c6),
+ (0xfbb16b339d0a17fe, 0xbfe542cec6203a63, 0xbfe7ea79c4f28160),
+ (0xfe93c58449c8fd51, 0x3fe7e653ec9effe6, 0xbfe547784cf0eeb5),
+ (0xe125d9535e1d7d96, 0x3fe56a646c9bc577, 0xbfe7c70e160b76ba),
+ (0xe9492784719b40f6, 0xbfe7bd8d74e13697, 0x3fe574eca79f247d),
+ (0x76693dbf45a5c11c, 0x3fe7a6aca203b146, 0x3fe58e21d55361dd),
+ (0xca01a90ba147a7a8, 0x3fe7a0e9b1cc2382, 0x3fe594727d17c430),
+ (0xeba7b196f2ce8a86, 0x3fe792dcb3fd68a0, 0x3fe5a3caee7bef45),
+ (0x65cec0767168cebc, 0xbfe781dbdad094ee, 0xbfe5b64237c79451),
+ (0xe46e9ddaa8d41951, 0xbfe76df89a6184ca, 0x3fe5cbb6beaf19d3),
+ (0xc394901bb60cd165, 0x3fe5e7e07a75103e, 0xbfe753a5e9dd67ee),
+ (0xefe39e4669e6b8e3, 0xbfe5ee1e7c908e91, 0xbfe74dc7ad48a603),
+ (0x6606d5cab1344ed4, 0xbfe60bbb919e2739, 0x3fe731c5d36a20ec),
+ (0xe151f4cddef4501f, 0xbfe7201c54d669d7, 0xbfe61e41c6dae1e5),
+ (0xd9381aa73bb196ba, 0xbfe719018e9ef492, 0xbfe625acfdb6514e),
+ (0x4de08bca51af503b, 0xbfe7060f07286185, 0xbfe6395ed52b7540),
+ (0x43ba67829cbf5ddd, 0xbfe64d04587eee54, 0xbfe6f307ef31a64f),
+ (0x51c3d8b11e8e3186, 0x3fe664fbc2d6363c, 0x3fe6dba5765c9f8b),
+ (0x762158955b8d3e1f, 0x3fe67b88d77e47ab, 0xbfe6c577911c77f9),
+ (0x7e1f8126bc820e3d, 0x3fe685a6ed43a0f0, 0x3fe6bb75e2686a13),
+ (0x77c0705a72b5023d, 0x3fe69d4e28e80836, 0x3fe6a3ee27f25da6),
+ ][:]
+
+ for (x, ys, yc) : inputs
+ var xf : flt64 = std.flt64frombits(x)
+ var rsf1, rcf1, rsf2, rcf2
+ (rsf1, rcf1) = math.sincos(xf)
+ rsf2 = math.sin(xf)
+ rcf2 = math.cos(xf)
+
+ var rsu1 = std.flt64bits(rsf1)
+ var rcu1 = std.flt64bits(rcf1)
+ var rsu2 = std.flt64bits(rsf2)
+ var rcu2 = std.flt64bits(rcf2)
+
+ testr.check(c, rsf1 == rsf2 && rcf1 == rcf2,
+ "sincos(0x{b=16,w=16,p=0}) is (0x{b=16,w=16,p=0}, 0x{b=16,w=16,p=0}), individual results (0x{b=16,w=16,p=0}, 0x{b=16,w=16,p=0})",
+ x, rsu1, rcu1, rsu2, rcu2)
+
+ testr.check(c, same64(rsu1, ys) && same64(rcu1, yc),
+ "sincos(0x{b=16,w=16,p=0}) should be (0x{b=16,w=16,p=0}, 0x{b=16,w=16,p=0}), was (0x{b=16,w=16,p=0}, 0x{b=16,w=16,p=0})",
+ x, ys, yc, rsu1, rcu1)
+ ;;
}
const sincos05 = {c
+ testr.check(c, std.isnan(math.cos(std.flt64nan())), "cos(NaN64) should be NaN")
+ testr.check(c, std.isnan(math.sin(std.flt64nan())), "sin(NaN64) should be NaN")
+ testr.check(c, std.isnan(math.cos(std.flt32nan())), "cos(NaN32) should be NaN")
+ testr.check(c, std.isnan(math.sin(std.flt32nan())), "sin(NaN32) should be NaN")
+
+ var s1, c1, s2, c2
+ (s1, c1) = math.sincos(std.flt64nan())
+ testr.check(c, std.isnan(s1), "sincos(NaN64) should be (NaN, NaN)")
+ testr.check(c, std.isnan(c1), "sincos(NaN64) should be (NaN, NaN)")
+ (s2, c2) = math.sincos(std.flt32nan())
+ testr.check(c, std.isnan(s2), "sincos(NaN32) should be (NaN, NaN)")
+ testr.check(c, std.isnan(c2), "sincos(NaN32) should be (NaN, NaN)")
}