diff options
Diffstat (limited to 'mpc/tests/mul.dat')
-rwxr-xr-x | mpc/tests/mul.dat | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/mpc/tests/mul.dat b/mpc/tests/mul.dat new file mode 100755 index 0000000000..13ea1e6ba5 --- /dev/null +++ b/mpc/tests/mul.dat @@ -0,0 +1,178 @@ +# Data file for mpc_mul +# +# Copyright (C) 2008, 2010, 2011, 2012 INRIA +# +# This file is part of GNU MPC. +# +# GNU MPC is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at your +#o ption) any later version. +# +# GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see http://www.gnu.org/licenses/ . +# +# The line format respects the parameter order in function prototype as +# follow: +# +# INEX_RE INEX_IM PREC_ROP_RE ROP_RE PREC_ROP_IM ROP_IM PREC_OP1_RE OP1_RE PREC_OP1_IM OP1_IM PREC_OP2_RE OP2_RE PREC_OP2_IM OP2_IM RND_RE RND_IM +# +# See add.dat for more details. + +# special values (following ISO C99 standard, G.5.1) +0 0 53 nan 53 +inf 53 -inf 53 -inf 53 -inf 53 -inf N Z +0 0 53 nan 53 +inf 53 -inf 53 +inf 53 +1 53 -inf Z U +0 0 53 +inf 53 -inf 53 +inf 53 -inf 53 +inf 53 +0 U D +0 0 53 +inf 53 -inf 53 +inf 53 +inf 53 -0 53 -1 D N +0 0 53 -inf 53 +inf 53 -inf 53 -inf 53 -0 53 -1 N U +0 0 53 -inf 53 +inf 53 -inf 53 +inf 53 +inf 53 nan Z D +0 0 53 -inf 53 -inf 53 +inf 53 -inf 53 nan 53 -1 U N +0 0 53 nan 53 nan 53 +inf 53 +inf 53 -0 53 nan D Z +0 0 53 nan 53 nan 53 -inf 53 -inf 53 nan 53 nan N D + +0 0 53 -inf 53 -inf 53 -1 53 -inf 53 +inf 53 -1 N D +0 0 53 -inf 53 nan 53 -inf 53 +1 53 +inf 53 -0 Z N +0 0 53 +inf 53 nan 53 +1 53 -inf 53 -0 53 +1 U Z +0 0 53 nan 53 nan 53 +inf 53 +1 53 -0 53 -0 D U +0 0 53 nan 53 -inf 53 -1 53 -inf 53 +inf 53 nan N N +0 0 53 nan 53 -inf 53 -inf 53 +1 53 nan 53 +1 Z Z +0 0 53 nan 53 nan 53 +1 53 -inf 53 -0 53 nan U U +0 0 53 nan 53 nan 53 +inf 53 +1 53 nan 53 nan D D + +0 0 53 +inf 53 nan 53 -0 53 -inf 53 +0 53 +inf D D +0 0 53 -inf 53 nan 53 -inf 53 +0 53 +1 53 -0 N Z +0 0 53 nan 53 nan 53 +0 53 -inf 53 -0 53 -0 Z U +0 0 53 -inf 53 nan 53 +inf 53 +0 53 -inf 53 nan U D +0 0 53 -inf 53 nan 53 -0 53 -inf 53 nan 53 -1 D N +0 0 53 nan 53 nan 53 -inf 53 +0 53 +0 53 nan N U +0 0 53 nan 53 nan 53 +0 53 -inf 53 nan 53 nan Z D + +0 0 53 +1 53 -0 53 +0 53 +1 53 -0 53 -1 Z D +0 0 53 -0 53 +0 53 -1 53 -0 53 +0 53 -0 U N +0 0 53 -inf 53 nan 53 -0 53 +1 53 nan 53 +inf D Z +0 0 53 nan 53 nan 53 +1 53 -0 53 -1 53 nan N D +0 0 53 nan 53 nan 53 +0 53 +1 53 nan 53 -0 Z N +0 0 53 nan 53 nan 53 -1 53 -0 53 nan 53 nan U Z + +0 0 53 +0 53 +0 53 -0 53 +0 53 +0 53 -0 U Z +0 0 53 nan 53 nan 53 +0 53 -0 53 nan 53 -inf D U +0 0 53 nan 53 nan 53 +0 53 +0 53 -1 53 nan N N +0 0 53 nan 53 nan 53 -0 53 -0 53 nan 53 -0 Z Z +0 0 53 nan 53 nan 53 -0 53 +0 53 nan 53 nan U U + +0 0 53 +inf 53 nan 53 nan 53 -inf 53 nan 53 +inf U U +0 0 53 -inf 53 nan 53 +inf 53 nan 53 -1 53 nan D D +0 0 53 nan 53 nan 53 nan 53 -inf 53 nan 53 -0 N Z +0 0 53 nan 53 nan 53 -inf 53 nan 53 nan 53 nan Z U + +0 0 53 nan 53 nan 53 +1 53 nan 53 nan 53 -1 Z U +0 0 53 nan 53 nan 53 nan 53 +1 53 -0 53 nan U D +0 0 53 nan 53 nan 53 -1 53 nan 53 nan 53 nan D N + +0 0 53 nan 53 nan 53 nan 53 +0 53 +0 53 nan D N +0 0 53 nan 53 nan 53 +0 53 nan 53 nan 53 nan N U + +0 0 53 nan 53 nan 53 nan 53 nan 53 nan 53 nan N U + +# pure real arguments +0 0 53 0x10000000000001p-52 53 -0 53 +1 53 -0 53 0x10000000000001p-52 53 -0 N N +0 0 53 0x10000000000001p-52 53 -0 53 +1 53 -0 53 0x10000000000001p-52 53 -0 Z Z +0 0 53 0x10000000000001p-52 53 -0 53 +1 53 -0 53 0x10000000000001p-52 53 -0 U U +0 0 53 -0x10000000000001p-52 53 -0 53 -1 53 -0 53 0x10000000000001p-52 53 -0 D D + +# one pure real argument +0 0 53 0x10000000000001p-52 53 0x10000000000001p-52 53 +1 53 +1 53 0x10000000000001p-52 53 -0 N N +0 0 53 0x10000000000001p-52 53 -0x10000000000001p-51 53 +1 53 -2 53 0x10000000000001p-52 53 -0 Z Z +- + 53 -0x30000000000004p-52 53 0x30000000000004p-52 53 -3 53 +3 53 0x10000000000001p-52 53 +0 N N ++ - 53 -0x30000000000002p-52 53 0x30000000000002p-52 53 -3 53 +3 53 0x10000000000001p-52 53 +0 Z Z ++ + 53 -0x30000000000002p-52 53 0x30000000000004p-52 53 -3 53 +3 53 0x10000000000001p-52 53 +0 U U +- - 53 -0x30000000000004p-52 53 0x30000000000002p-52 53 -3 53 +3 53 0x10000000000001p-52 53 +0 D D +0 0 53 -0x10000000000001p-52 53 -0x10000000000001p-50 53 -1 53 -4 53 0x10000000000001p-52 53 +0 D D +0 0 53 +0 53 +0 53 +0 53 +0 53 0x10000000000001p-52 53 -1 N N +0 0 53 +0 53 -0 53 +0 53 -0 53 0x10000000000001p-52 53 -2 Z Z +0 0 53 +0 53 +0 53 +0 53 +0 53 0x10000000000001p-52 53 +3 U U +0 0 53 -0 53 -0 53 -0 53 -0 53 0x10000000000001p-52 53 +4 D D + +# pure imaginary arguments +0 0 53 -0x10000000000001p-52 53 -0 53 -0 53 0x10000000000001p-52 53 -0 53 +1 N N +0 0 53 -0x10000000000001p-52 53 +0 53 +0 53 0x10000000000001p-52 53 -0 53 +1 Z Z +0 0 53 -0x10000000000001p-52 53 +0 53 +0 53 0x10000000000001p-52 53 -0 53 +1 U U +0 0 53 -0x10000000000001p-52 53 -0 53 -0 53 0x10000000000001p-52 53 -0 53 +1 D D + +# one pure imaginary argument +0 0 53 -0x10000000000001p-52 53 -0x10000000000001p-52 53 -0 53 0x10000000000001p-52 53 -1 53 +1 N N +0 0 53 +0x10000000000001p-52 53 -0x10000000000001p-51 53 +0 53 0x10000000000001p-52 53 -2 53 -1 Z Z ++ - 53 0x30000000000004p-52 53 -0x30000000000004p-52 53 +0 53 0x10000000000001p-52 53 -3 53 -3 N N +- + 53 0x30000000000002p-52 53 -0x30000000000002p-52 53 +0 53 0x10000000000001p-52 53 -3 53 -3 Z Z ++ + 53 0x30000000000004p-52 53 -0x30000000000002p-52 53 +0 53 0x10000000000001p-52 53 -3 53 -3 U U +- - 53 0x30000000000002p-52 53 -0x30000000000004p-52 53 +0 53 0x10000000000001p-52 53 -3 53 -3 D D +0 0 53 +0x10000000000001p-52 53 -0x10000000000001p-50 53 -0 53 0x10000000000001p-52 53 -4 53 -1 D D + +# big precision uses Karatsuba method +0 0 4096 0x1420176785BD601FC018AD36471p-96 4096 -0x1ECCDBDA38B2611A32848E7ADF43p-100 53 0x6B2E363676587p-44 53 0x1AC20AAC49ED37p-47 53 0x12264C57B44C6Bp-53 53 -0x138639A4B8D8B3p-50 N N + +# Karatsuba case where x=0 since ad=bc: (1+i)^2 at artificially high +# precision so that Karatsuba is actually used. +0 0 4096 0 4096 2 4096 1 4096 1 4096 1 4096 1 N N +# trigger the line reducing prec_x to prec_u +0 0 4096 0 4096 2 40960 1 40960 1 40960 1 40960 1 N N +# another particular cases ++ + 6 -0x9p-497 6 0x33p-315 6 -0x1dp-73 6 0x3p148 6 0x11p-463 6 0x3p-645 N N ++ - 6 0x33p-315 6 0x9p-497 6 0x3p148 6 0x1dp-73 6 0x11p-463 6 0x3p-645 N N +0 0 4 0x1p-1902 4 0x3p-1085 4 -0x1p-892 4 -0x3p-75 4 -0x1p-1010 4 0 N N + +# a few particular values +0 0 8 10 8 -5 8 4 8 3 8 1 8 -2 N N ++ + 27 0b1.10110000001100010010000000e-3 27 0b1.00111100000010100001011001e-1 27 0b1.11111011011000010101000000e-2 27 0b1.11010001010110111001110001e-3 27 0b1.10100101110110011011100100e-1 27 0b1.10111100011000001100110011e-1 N N +0 0 15 2 15 0 15 -1 15 -1 15 -1 15 1 N N + +# check squares, copied from sqr.dat ++ - 53 0xfdbac097c8dc58p+2096 53 -0x7f6e5d4c3b2a2p+1036 53 -0xfedcba9876543p+1024 53 0x10000000000001p-42 53 -0xfedcba9876543p+1024 53 0x10000000000001p-42 U D ++ 0 30 309485009533114692573069312 30 18889465966662952943616 30 17592186044416 30 536870913 30 17592186044416 30 536870913 N N +0 0 4 0 4 2 4 1 4 1 4 1 4 1 N N ++ + 8 0b1.1000111e-3 8 0b1.1100111e-3 27 0b1.11111011011000010101000000e-2 27 0b1.11010001010110111001110001e-3 27 0b1.11111011011000010101000000e-2 27 0b1.11010001010110111001110001e-3 N N +? + 3464 inf 3464 inf 866 -0x2.5763c6519ef1510f8afa101a210b8030b1909cc17004db561a25d9b53e2c08c41c01e8bbac5af6299b9d8786030aa14943d841798c8c369287942e4d4cec42a60ab0922af931159805e631128e97f973754ad53972d5d320a651a3b4a667f0ef2b92dbd698d159c3642675140@192158913 866 -0xd.15f2d530934dd930d66e89d70762d2337a8f973dd6915eb6b532fd372fcc955df1d852632d4e46fe64154ceda991a1302caf1b0ec622497e3e5724dd05b1c89a06e28d7e18e8af58f5ff4c9998cb31714688867524f41e0b31e847c1bf40de5127f858069998efd7c3e599080@192158893 866 -0x2.5763c6519ef1510f8afa101a210b8030b1909cc17004db561a25d9b53e2c08c41c01e8bbac5af6299b9d8786030aa14943d841798c8c369287942e4d4cec42a60ab0922af931159805e631128e97f973754ad53972d5d320a651a3b4a667f0ef2b92dbd698d159c3642675140@192158913 866 -0xd.15f2d530934dd930d66e89d70762d2337a8f973dd6915eb6b532fd372fcc955df1d852632d4e46fe64154ceda991a1302caf1b0ec622497e3e5724dd05b1c89a06e28d7e18e8af58f5ff4c9998cb31714688867524f41e0b31e847c1bf40de5127f858069998efd7c3e599080@192158893 N N +? + 2256 0 2256 -0 564 0xc.87999bfd1cb1a64288881e214b7cf1af979863b23c030b79c4a8bebb39177967608388a2e4df527977e7755a25df8af8f72fdd6dd2f42bd00de83088b4e9b59ce85caf2e6b0c0@-184298749 564 -0x2.5109af459d4daf357e09475ec991cdc9b02c8f7dfacdc060d2a24710d09c997f8aea6dbd46f10828c30b583fdcc90d7dcbb895689d594d3813db40784d2309e450d1fb6e38da8@-184298726 564 0xc.87999bfd1cb1a64288881e214b7cf1af979863b23c030b79c4a8bebb39177967608388a2e4df527977e7755a25df8af8f72fdd6dd2f42bd00de83088b4e9b59ce85caf2e6b0c0@-184298749 564 -0x2.5109af459d4daf357e09475ec991cdc9b02c8f7dfacdc060d2a24710d09c997f8aea6dbd46f10828c30b583fdcc90d7dcbb895689d594d3813db40784d2309e450d1fb6e38da8@-184298726 N N + +# intermediate over- and underflows +- + 100 -inf 100 +inf 100 0x1@125000750 100 0x3@125000750 100 0x1@225000750 100 0x2@225000750 N N +- + 100 -inf 100 +inf 100 0x1@225000750 100 0x2@225000750 100 0x1@125000750 100 0x3@125000750 N N +- - 100 -inf 100 -inf 100 0x1@225000750 100 -0x2@225000750 100 0x1@125000750 100 -0x3@125000750 N N ++ - 100 -0 100 +0 100 0x1@-125000750 100 0x3@-125000750 100 0x1@-225000750 100 0x2@-225000750 N N ++ - 100 -0 100 +0 100 0x1@-225000750 100 0x2@-225000750 100 0x1@-125000750 100 0x3@-125000750 N N +- - 100 +0 100 +0 100 0x3@-125000750 100 0x1@-125000750 100 0x1@-225000750 100 0x2@-225000750 N N +- - 100 +0 100 +0 100 0x4@-125000750 100 0x1@-125000750 100 0x1@-225000750 100 0x2@-225000750 N N ++ - 100 -0 100 +0 100 0x2@-225000750 100 0x1@-225000750 100 0x1@-125000750 100 0x3@-125000750 N N +0 - 100 +0 100 +0 100 0x1@-225000750 100 0x1@-225000750 100 0x1@-125000750 100 0x1@-125000750 N N +0 + 100 +0 100 +inf 100 0x1@125000750 100 0x1@125000750 100 0x1@225000750 100 0x1@225000750 N N ++ 0 100 +inf 100 +0 100 0x1@125000750 100 0x1@125000750 100 0x1@225000750 100 -0x1@225000750 N N +# the same with directed rounding +- + 10 -inf 10 +inf 10 0x1@125000750 10 0x3@125000750 10 0x1@225000750 10 0x2@225000750 D U ++ - 10 -0b1.111111111e1073741822 10 0b1.111111111e1073741822 10 0x1@125000750 10 0x3@125000750 10 0x1@225000750 10 0x2@225000750 U D ++ - 10 -0 10 +0 10 0x1@-125000750 10 0x3@-125000750 10 0x1@-225000750 10 0x2@-225000750 U D +- + 10 -0b1e-1073741824 10 0b1e-1073741824 10 0x1@-125000750 10 0x3@-125000750 10 0x1@-225000750 10 0x2@-225000750 D U +# starting with Karatsuba +- + 10000 -inf 100 +inf 100 0x1@125000750 100 0x3@125000750 100 0x1@225000750 100 0x2@225000750 N N +- + 10000 -inf 100 +inf 100 0x1@225000750 100 0x2@225000750 100 0x1@125000750 100 0x3@125000750 N N +- - 10000 -inf 100 -inf 100 0x1@225000750 100 -0x2@225000750 100 0x1@125000750 100 -0x3@125000750 N N ++ - 10000 -0 100 +0 100 0x1@-125000750 100 0x3@-125000750 100 0x1@-225000750 100 0x2@-225000750 N N ++ - 10000 -0 100 +0 100 0x1@-225000750 100 0x2@-225000750 100 0x1@-125000750 100 0x3@-125000750 N N +- - 10000 +0 100 +0 100 0x3@-125000750 100 0x1@-125000750 100 0x1@-225000750 100 0x2@-225000750 N N +- - 10000 +0 100 +0 100 0x4@-125000750 100 0x1@-125000750 100 0x1@-225000750 100 0x2@-225000750 N N ++ - 10000 -0 100 +0 100 0x2@-225000750 100 0x1@-225000750 100 0x1@-125000750 100 0x3@-125000750 N N +0 - 10000 +0 100 +0 100 0x1@-225000750 100 0x1@-225000750 100 0x1@-125000750 100 0x1@-125000750 N N +0 + 10000 +0 100 +inf 100 0x1@125000750 100 0x1@125000750 100 0x1@225000750 100 0x1@225000750 N N ++ 0 10000 +inf 100 +0 100 0x1@125000750 100 0x1@125000750 100 0x1@225000750 100 -0x1@225000750 N N ++ + 10000 +inf 100 +inf 100 0x1@125000750 100 0x3@125000750 100 0x1@143434706 100 0x2@143434705 N N + +# improve code coverage: case where sign_x==0 in mpc_mul_karatsuba +0 0 2000 6 2000 8 2000 4 2000 2 2000 2 2000 1 N N +0 0 2000 0 2000 4 2000 2 2000 2 2000 1 2000 1 N N + ++ 0 2 1 2 0x2p-536870913 2 1 2 0x1p-536870913 2 1 2 0x1p-536870913 N N +0 - 2 0 2 1 2 0x1p-536870913 2 1 2 1 2 0x1p-536870913 N N |