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
|
# Data file for mpc_mul
#
# Copyright (C) 2008, 2010, 2011, 2012, 2022 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
# the following is the square (x+i*y)^2 where |x| >= 2.34*2^768635652 and
# |y| <= 13.09*2^768635572, thus x^2 >= 5.47*2^1537271304 and
# y^2 <= 171.34*2^1537271144 < x*2^(-155) thus x^2-y^2 should overflow
# with the default emax = 1073741821
? + 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 -inf 10 +inf 10 0x1@125000750 10 0x3@125000750 10 0x1@225000750 10 0x2@225000750 A A
# the following test assumes the maximum MPFR exponent is 1073741821
# and the minimum exponent is -1073741821
+ - 10 -0b1.111111111e1073741820 10 0b1.111111111e1073741820 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-1073741822 10 0b1e-1073741822 10 0x1@-125000750 10 0x3@-125000750 10 0x1@-225000750 10 0x2@-225000750 D U
- + 10 -0b1e-1073741822 10 0b1e-1073741822 10 0x1@-125000750 10 0x3@-125000750 10 0x1@-225000750 10 0x2@-225000750 A A
# 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
# error in sign of 0 with exact Karatsuba found on 2022-11-30
0 0 1473 -50 1473 +0 20 1 20 2 20 -10 20 20 N N
|