enable 128-bit arithmetic on x64 systems.

[SVN r77265]
This commit is contained in:
John Maddock
2012-03-08 16:56:32 +00:00
parent 78cfa00b07
commit b680077687
6 changed files with 881 additions and 1019 deletions
+3 -3
View File
@@ -961,7 +961,7 @@ inline void subtract_unsigned(cpp_int_backend<MinBits, Signed, Allocator>& resul
}
else if(c == 0)
{
result = 0;
result = static_cast<limb_type>(0);
return;
}
@@ -1092,7 +1092,7 @@ inline void multiply(cpp_int_backend<MinBits, Signed, Allocator>& result, cpp_in
{
if(!val)
{
result = 0;
result = static_cast<limb_type>(0);
return;
}
double_limb_type carry = 0;
@@ -2108,7 +2108,7 @@ inline void eval_lcm(cpp_int_backend<MinBits, Signed, Allocator>& result, const
if(is_zero(t))
{
result = 0;
result = static_cast<limb_type>(0);
}
else
{
@@ -8,6 +8,25 @@
namespace boost{ namespace multiprecision{
#if defined(__GNUC__) && !defined(BOOST_INTEL) && defined(__x86_64__)
typedef boost::uint64_t limb_type;
typedef boost::int64_t signed_limb_type;
typedef unsigned __int128 double_limb_type;
typedef __int128 signed_double_limb_type;
static const limb_type max_block_10 = 1000000000000000000uLL;
static const limb_type digits_per_block_10 = 18;
inline limb_type block_multiplier(unsigned count)
{
static const limb_type values[digits_per_block_10]
= { 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000, 100000000000000, 1000000000000000, 10000000000000000, 100000000000000000, 1000000000000000000 };
BOOST_ASSERT(count < digits_per_block_10);
return values[count];
}
#else
typedef boost::uint32_t limb_type;
typedef boost::int32_t signed_limb_type;
typedef boost::uint64_t double_limb_type;
@@ -23,6 +42,8 @@ inline limb_type block_multiplier(unsigned count)
return values[count];
}
#endif
template <class T>
inline void minmax(const T& a, const T& b, T& aa, T& bb)
{
+6 -6
View File
@@ -30,7 +30,7 @@ struct fixed_int
BOOST_STATIC_CONSTANT(limb_type, max_limb_value = ~static_cast<limb_type>(0u));
BOOST_STATIC_CONSTANT(limb_type, upper_limb_mask = (Bits % limb_bits ? (1 << (Bits % limb_bits)) - 1 : max_limb_value));
BOOST_STATIC_CONSTANT(limb_type, upper_limb_not_mask = ~upper_limb_mask);
BOOST_STATIC_CONSTANT(limb_type, sign_bit_mask = 1u << ((Bits % limb_bits ? Bits % limb_bits : limb_bits) - 1));
BOOST_STATIC_CONSTANT(limb_type, sign_bit_mask = limb_type(1u) << ((Bits % limb_bits ? Bits % limb_bits : limb_bits) - 1));
typedef boost::array<limb_type, limb_count> data_type;
fixed_int(){}
@@ -427,7 +427,7 @@ inline void subtract(fixed_int<Bits, Signed>& result, const limb_type& o)
carry >>= fixed_int<Bits, Signed>::limb_bits;
for(int i = static_cast<int>(fixed_int<Bits, Signed>::limb_count) - 2; (carry != 1) && (i >= 0); --i)
{
carry += static_cast<double_limb_type>(result.data()[i]) + 0xFFFFFFFF;
carry += static_cast<double_limb_type>(result.data()[i]) + fixed_int<Bits, Signed>::max_limb_value;
result.data()[i] = static_cast<limb_type>(carry);
carry >>= fixed_int<Bits, Signed>::limb_bits;
}
@@ -748,7 +748,7 @@ void divide_unsigned_helper(fixed_int<Bits, Signed>& result, const fixed_int<Bit
r = x.data()[fixed_int<Bits, Signed>::limb_count - 1] % y.data()[fixed_int<Bits, Signed>::limb_count - 1];
return;
}
else if(r_order == static_cast<int>(fixed_int<Bits, Signed>::limb_count) - 2)
else if(r_order == static_cast<unsigned>(fixed_int<Bits, Signed>::limb_count) - 2)
{
double_limb_type a, b;
a = (static_cast<double_limb_type>(r.data()[r_order]) << fixed_int<Bits, Signed>::limb_bits) | r.data()[r_order + 1];
@@ -1335,7 +1335,7 @@ template <class R, unsigned Bits, bool Signed>
inline typename enable_if<is_integral<R>, void>::type convert_to(R* result, const fixed_int<Bits, Signed>& backend, const mpl::false_&)
{
unsigned shift = (fixed_int<Bits, Signed>::limb_count - 1) * fixed_int<Bits, Signed>::limb_bits;
*result = 0;
*result = static_cast<limb_type>(0);
for(unsigned i = 0; i < fixed_int<Bits, Signed>::limb_count; ++i)
{
*result += static_cast<R>(backend.data()[i]) << shift;
@@ -1362,7 +1362,7 @@ inline typename enable_if<is_floating_point<R>, void>::type convert_to(R* result
return;
}
unsigned shift = (fixed_int<Bits, Signed>::limb_count - 1) * fixed_int<Bits, Signed>::limb_bits;
*result = 0;
*result = static_cast<limb_type>(0);
for(unsigned i = 0; i < fixed_int<Bits, Signed>::limb_count; ++i)
{
*result += static_cast<R>(std::ldexp(static_cast<double>(backend.data()[i]), shift));
@@ -1490,7 +1490,7 @@ inline void eval_lcm(fixed_int<Bits, Signed>& result, const fixed_int<Bits, Sign
if(is_zero(t))
{
result = 0;
result = static_cast<limb_type>(0);
}
else
{
File diff suppressed because it is too large Load Diff
+363 -448
View File
@@ -1,507 +1,422 @@
gmp_float 50 + 0.0180644
gmp_float 50 - 0.0194673
gmp_float 50 * 0.0505578
gmp_float 50 / 0.278179
gmp_float 50 str 0.00357972
gmp_float 50 +(int)0.0115205
gmp_float 50 -(int)0.0197263
gmp_float 50 *(int)0.0165976
gmp_float 50 /(int)0.0758893
gmp_float 100 + 0.019475
gmp_float 100 - 0.0218422
gmp_float 100 * 0.090686
gmp_float 100 / 0.378055
gmp_float 100 str 0.00557522
gmp_float 100 +(int)0.0127856
gmp_float 100 -(int)0.0205184
gmp_float 100 *(int)0.0200577
gmp_float 100 /(int)0.0948556
gmp_float 500 + 0.0317241
gmp_float 500 - 0.0335304
gmp_float 500 * 0.947017
gmp_float 500 / 1.5881
gmp_float 500 str 0.0313793
gmp_float 500 +(int)0.0187639
gmp_float 500 -(int)0.0265882
gmp_float 500 *(int)0.0415067
gmp_float 500 /(int)0.232493
gmp_int 64 + 0.0167521
gmp_int 64 - 0.0188881
gmp_int 64 * 0.011645
gmp_int 64 / 0.1697
gmp_int 64 str 0.000336635
gmp_int 64 +(int)0.00723269
gmp_int 64 -(int)0.00741945
gmp_int 64 *(int)0.0120496
gmp_int 64 /(int)0.0501068
gmp_int 64 % 0.16582
gmp_int 64 | 0.0115873
gmp_int 64 & 0.0125951
gmp_int 64 ^ 0.0129732
gmp_int 64 << 0.00969083
gmp_int 64 >> 0.0130601
gmp_int 64 %(int)0.034786
gmp_int 64 |(int)0.0424747
gmp_int 64 &(int)0.0441868
gmp_int 64 ^(int)0.0442481
gmp_int 128 + 0.0192114
gmp_int 128 - 0.0219479
gmp_int 128 * 0.0182506
gmp_int 128 / 0.196561
gmp_int 128 str 0.00232097
gmp_int 128 +(int)0.00871277
gmp_int 128 -(int)0.0130434
gmp_int 128 *(int)0.0127078
gmp_int 128 /(int)0.0568248
gmp_int 128 % 0.164977
gmp_int 128 | 0.0134681
gmp_int 128 & 0.01436
gmp_int 128 ^ 0.0140653
gmp_int 128 << 0.0131179
gmp_int 128 >> 0.0107065
gmp_int 128 %(int)0.0405959
gmp_int 128 |(int)0.0440289
gmp_int 128 &(int)0.0453998
gmp_int 128 ^(int)0.0468496
gmp_int 256 + 0.0230482
gmp_int 256 - 0.0289896
gmp_int 256 * 0.0476911
gmp_int 256 / 0.240552
gmp_int 256 str 0.000971703
gmp_int 256 +(int)0.0145101
gmp_int 256 -(int)0.0148337
gmp_int 256 *(int)0.0170638
gmp_int 256 /(int)0.0686065
gmp_int 256 % 0.197103
gmp_int 256 | 0.0159192
gmp_int 256 & 0.015575
gmp_int 256 ^ 0.0166751
gmp_int 256 << 0.0148945
gmp_int 256 >> 0.0111136
gmp_int 256 %(int)0.0516333
gmp_int 256 |(int)0.0474723
gmp_int 256 &(int)0.0466442
gmp_int 256 ^(int)0.0465869
gmp_int 512 + 0.028268
gmp_int 512 - 0.0352221
gmp_int 512 * 0.103105
gmp_int 512 / 0.281226
gmp_int 512 str 0.00167382
gmp_int 512 +(int)0.0170154
gmp_int 512 -(int)0.0179625
gmp_int 512 *(int)0.021358
gmp_int 512 /(int)0.0950571
gmp_int 512 % 0.230214
gmp_int 512 | 0.0208511
gmp_int 512 & 0.019777
gmp_int 512 ^ 0.025011
gmp_int 512 << 0.0182795
gmp_int 512 >> 0.0121814
gmp_int 512 %(int)0.0651899
gmp_int 512 |(int)0.0493584
gmp_int 512 &(int)0.0498514
gmp_int 512 ^(int)0.049668
gmp_int 1024 + 0.0408966
gmp_int 1024 - 0.0463151
gmp_int 1024 * 0.326898
gmp_int 1024 / 0.36922
gmp_int 1024 str 0.00297363
gmp_int 1024 +(int)0.0197647
gmp_int 1024 -(int)0.0199956
gmp_int 1024 *(int)0.0300116
gmp_int 1024 /(int)0.144581
gmp_int 1024 % 0.302132
gmp_int 1024 | 0.0284821
gmp_int 1024 & 0.0266602
gmp_int 1024 ^ 0.0299441
gmp_int 1024 << 0.0247868
gmp_int 1024 >> 0.0162548
gmp_int 1024 %(int)0.0799406
gmp_int 1024 |(int)0.0525727
gmp_int 1024 &(int)0.0539474
gmp_int 1024 ^(int)0.0539722
mpq_rational 64 + 0.254473
mpq_rational 64 - 0.260331
mpq_rational 64 * 0.426868
mpq_rational 64 / 1.50105
mpq_rational 64 str 0.000927423
mpq_rational 64 +(int)0.309729
mpq_rational 64 -(int)0.306598
mpq_rational 64 *(int)0.344178
mpq_rational 64 /(int)0.32842
mpq_rational 128 + 0.542374
mpq_rational 128 - 0.545764
mpq_rational 128 * 0.968054
mpq_rational 128 / 2.78757
mpq_rational 128 str 0.00111655
mpq_rational 128 +(int)0.154116
mpq_rational 128 -(int)0.151187
mpq_rational 128 *(int)0.179899
mpq_rational 128 /(int)0.184167
mpq_rational 256 + 2.34795
mpq_rational 256 - 2.3565
mpq_rational 256 * 4.39195
mpq_rational 256 / 8.9203
mpq_rational 256 str 0.00175742
mpq_rational 256 +(int)0.177483
mpq_rational 256 -(int)0.16783
mpq_rational 256 *(int)0.200539
mpq_rational 256 /(int)0.206129
mpq_rational 512 + 5.10523
mpq_rational 512 - 5.08802
mpq_rational 512 * 9.6344
mpq_rational 512 / 16.8502
mpq_rational 512 str 0.00246714
mpq_rational 512 +(int)0.212807
mpq_rational 512 -(int)0.212048
mpq_rational 512 *(int)0.254142
mpq_rational 512 /(int)0.262442
mpq_rational 1024 + 11.2331
mpq_rational 1024 - 11.2446
mpq_rational 1024 * 20.9879
mpq_rational 1024 / 35.6472
mpq_rational 1024 str 0.00550783
mpq_rational 1024 +(int)0.27756
mpq_rational 1024 -(int)0.271845
mpq_rational 1024 *(int)0.328602
mpq_rational 1024 /(int)0.350883
fixed_int 64 + 0.00207163
fixed_int 64 - 0.00216403
fixed_int 64 * 0.00392745
fixed_int 64 / 0.0556903
fixed_int 64 str 0.000302762
fixed_int 64 +(int)0.00358307
fixed_int 64 -(int)0.00354668
fixed_int 64 *(int)0.00294381
fixed_int 64 /(int)0.0169012
fixed_int 64 % 0.054413
fixed_int 64 | 0.00257616
fixed_int 64 & 0.00259593
fixed_int 64 ^ 0.00256688
fixed_int 64 << 0.00115455
fixed_int 64 >> 0.00147407
fixed_int 64 %(int)0.0243407
fixed_int 64 |(int)0.00208078
fixed_int 64 &(int)0.00209559
fixed_int 64 ^(int)0.00202777
fixed_int 128 + 0.00326026
fixed_int 128 - 0.00372498
fixed_int 128 * 0.0104772
fixed_int 128 / 0.105756
fixed_int 128 str 0.000500691
fixed_int 128 +(int)0.00359962
fixed_int 128 -(int)0.00360689
fixed_int 128 *(int)0.00422148
fixed_int 128 /(int)0.0634475
fixed_int 128 % 0.106105
fixed_int 128 | 0.00363433
fixed_int 128 & 0.00361924
fixed_int 128 ^ 0.00361813
fixed_int 128 << 0.00632357
fixed_int 128 >> 0.00238745
fixed_int 128 %(int)0.0811764
fixed_int 128 |(int)0.00190869
fixed_int 128 &(int)0.00245967
fixed_int 128 ^(int)0.00237775
fixed_int 256 + 0.00834722
fixed_int 256 - 0.00653903
fixed_int 256 * 0.0324122
fixed_int 256 / 0.198305
fixed_int 256 str 0.00111683
fixed_int 256 +(int)0.00405163
fixed_int 256 -(int)0.00385712
fixed_int 256 *(int)0.00849409
fixed_int 256 /(int)0.127666
fixed_int 256 % 0.19685
fixed_int 256 | 0.0108232
fixed_int 256 & 0.0108415
fixed_int 256 ^ 0.0108455
fixed_int 256 << 0.00826823
fixed_int 256 >> 0.00854822
fixed_int 256 %(int)0.15306
fixed_int 256 |(int)0.00275195
fixed_int 256 &(int)0.00419648
fixed_int 256 ^(int)0.0027653
fixed_int 512 + 0.0128543
fixed_int 512 - 0.0120433
fixed_int 512 * 0.201059
fixed_int 512 / 0.385977
fixed_int 512 str 0.00286314
fixed_int 512 +(int)0.00694047
fixed_int 512 -(int)0.00681002
fixed_int 512 *(int)0.015882
fixed_int 512 /(int)0.244657
fixed_int 512 % 0.385184
fixed_int 512 | 0.0131341
fixed_int 512 & 0.013122
fixed_int 512 ^ 0.013116
fixed_int 512 << 0.0150546
fixed_int 512 >> 0.0134889
fixed_int 512 %(int)0.303051
fixed_int 512 |(int)0.00618124
fixed_int 512 &(int)0.00836021
fixed_int 512 ^(int)0.00608555
fixed_int 1024 + 0.0330379
fixed_int 1024 - 0.0311489
fixed_int 1024 * 0.701951
fixed_int 1024 / 0.708393
fixed_int 1024 str 0.00872206
fixed_int 1024 +(int)0.0116939
fixed_int 1024 -(int)0.0116182
fixed_int 1024 *(int)0.0346698
fixed_int 1024 /(int)0.692818
fixed_int 1024 % 0.711308
fixed_int 1024 | 0.0176472
fixed_int 1024 & 0.0176585
fixed_int 1024 ^ 0.0177043
fixed_int 1024 << 0.0242721
fixed_int 1024 >> 0.0248274
fixed_int 1024 %(int)0.584615
fixed_int 1024 |(int)0.0107899
fixed_int 1024 &(int)0.0166854
fixed_int 1024 ^(int)0.0108555
cpp_float 50 + 0.0142302
cpp_float 50 - 0.0153931
cpp_float 50 * 0.137722
cpp_float 50 / 2.0214
cpp_float 50 str 0.00924301
cpp_float 50 +(int)0.0240351
cpp_float 50 -(int)0.0252498
cpp_float 50 *(int)0.0387713
cpp_float 50 /(int)0.199003
cpp_float 100 + 0.0178132
cpp_float 100 - 0.0189367
cpp_float 100 * 0.293407
cpp_float 100 / 4.24891
cpp_float 100 str 0.0160219
cpp_float 100 +(int)0.0334828
cpp_float 100 -(int)0.0326407
cpp_float 100 *(int)0.063236
cpp_float 100 /(int)0.341837
cpp_float 500 + 0.044608
cpp_float 500 - 0.0457737
cpp_float 500 * 2.88591
cpp_float 500 / 31.8072
cpp_float 500 str 0.0639606
cpp_float 500 +(int)0.0947227
cpp_float 500 -(int)0.0966926
cpp_float 500 *(int)0.224258
cpp_float 500 /(int)1.39765
mpfr_float 50 + 0.0194724
mpfr_float 50 - 0.0228715
mpfr_float 50 * 0.0587051
mpfr_float 50 / 0.319258
mpfr_float 50 str 0.00735177
mpfr_float 50 +(int)0.0285879
mpfr_float 50 -(int)0.0468028
mpfr_float 50 *(int)0.03626
mpfr_float 50 /(int)0.0889091
mpfr_float 100 + 0.0211419
mpfr_float 100 - 0.0251794
mpfr_float 100 * 0.0946069
mpfr_float 100 / 0.464237
mpfr_float 100 str 0.00743083
mpfr_float 100 +(int)0.0302544
mpfr_float 100 -(int)0.0478439
mpfr_float 100 *(int)0.0407275
mpfr_float 100 /(int)0.109517
mpfr_float 500 + 0.0338
mpfr_float 500 - 0.037242
mpfr_float 500 * 0.852196
mpfr_float 500 / 2.80673
mpfr_float 500 str 0.0339866
mpfr_float 500 +(int)0.0427411
mpfr_float 500 -(int)0.060913
mpfr_float 500 *(int)0.0814603
mpfr_float 500 /(int)0.254409
[section:float_performance Float Type Perfomance]
[table Operator *
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][2.72405 (0.137722s)][3.23542 (0.293407s)][3.38644 (2.88591s)]]
[[gmp_float][[*1] (0.0505578s)][[*1] (0.090686s)][1.11127 (0.947017s)]]
[[mpfr_float][1.16115 (0.0587051s)][1.04324 (0.0946069s)][[*1] (0.852196s)]]
]
[table Operator *(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][2.33595 (0.0387713s)][3.1527 (0.063236s)][5.40294 (0.224258s)]]
[[gmp_float][[*1] (0.0165976s)][[*1] (0.0200577s)][[*1] (0.0415067s)]]
[[mpfr_float][2.18465 (0.03626s)][2.03052 (0.0407275s)][1.96258 (0.0814603s)]]
]
[table Operator +
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][[*1] (0.0142302s)][[*1] (0.0178132s)][1.40612 (0.044608s)]]
[[gmp_float][1.26944 (0.0180644s)][1.09329 (0.019475s)][[*1] (0.0317241s)]]
[[mpfr_float][1.36838 (0.0194724s)][1.18686 (0.0211419s)][1.06543 (0.0338s)]]
]
[table Operator +(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][2.08629 (0.0240351s)][2.61878 (0.0334828s)][5.04813 (0.0947227s)]]
[[gmp_float][[*1] (0.0115205s)][[*1] (0.0127856s)][[*1] (0.0187639s)]]
[[mpfr_float][2.48148 (0.0285879s)][2.36628 (0.0302544s)][2.27784 (0.0427411s)]]
]
[table Operator -
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][[*1] (0.0153931s)][[*1] (0.0189367s)][1.36514 (0.0457737s)]]
[[gmp_float][1.26468 (0.0194673s)][1.15343 (0.0218422s)][[*1] (0.0335304s)]]
[[mpfr_float][1.48583 (0.0228715s)][1.32966 (0.0251794s)][1.11069 (0.037242s)]]
]
[table Operator -(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][1.28001 (0.0252498s)][1.5908 (0.0326407s)][3.63667 (0.0966926s)]]
[[gmp_float][[*1] (0.0197263s)][[*1] (0.0205184s)][[*1] (0.0265882s)]]
[[mpfr_float][2.37262 (0.0468028s)][2.33176 (0.0478439s)][2.29098 (0.060913s)]]
]
[table Operator /
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][7.26654 (2.0214s)][11.2389 (4.24891s)][20.0284 (31.8072s)]]
[[gmp_float][[*1] (0.278179s)][[*1] (0.378055s)][[*1] (1.5881s)]]
[[mpfr_float][1.14767 (0.319258s)][1.22796 (0.464237s)][1.76735 (2.80673s)]]
]
[table Operator /(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][2.62228 (0.199003s)][3.60376 (0.341837s)][6.01157 (1.39765s)]]
[[gmp_float][[*1] (0.0758893s)][[*1] (0.0948556s)][[*1] (0.232493s)]]
[[mpfr_float][1.17156 (0.0889091s)][1.15457 (0.109517s)][1.09427 (0.254409s)]]
]
[table Operator str
[[Backend][50 Bits][100 Bits][500 Bits]]
[[cpp_float][2.58205 (0.00924301s)][2.87378 (0.0160219s)][2.03831 (0.0639606s)]]
[[gmp_float][[*1] (0.00357972s)][[*1] (0.00557522s)][[*1] (0.0313793s)]]
[[mpfr_float][2.05373 (0.00735177s)][1.33283 (0.00743083s)][1.08309 (0.0339866s)]]
]
[endsect]
gmp_int 64 + 0.016582
gmp_int 64 - 0.0174517
gmp_int 64 * 0.0112253
gmp_int 64 / 0.170951
gmp_int 64 str 0.000343689
gmp_int 64 +(int)0.00688382
gmp_int 64 -(int)0.00734613
gmp_int 64 *(int)0.00881438
gmp_int 64 /(int)0.0465651
gmp_int 64 % 0.164576
gmp_int 64 | 0.0101555
gmp_int 64 & 0.00955666
gmp_int 64 ^ 0.00987346
gmp_int 64 << 0.0106043
gmp_int 64 >> 0.0093887
gmp_int 64 %(int)0.0297463
gmp_int 64 |(int)0.0403338
gmp_int 64 &(int)0.0417288
gmp_int 64 ^(int)0.0405779
gmp_int 64 gcd 0.173816
gmp_int 128 + 0.0183088
gmp_int 128 - 0.0189266
gmp_int 128 * 0.0161084
gmp_int 128 / 0.191775
gmp_int 128 str 0.000374699
gmp_int 128 +(int)0.00866339
gmp_int 128 -(int)0.0089443
gmp_int 128 *(int)0.0114143
gmp_int 128 /(int)0.0534638
gmp_int 128 % 0.161212
gmp_int 128 | 0.0107201
gmp_int 128 & 0.0113559
gmp_int 128 ^ 0.0112116
gmp_int 128 << 0.0103295
gmp_int 128 >> 0.00813413
gmp_int 128 %(int)0.03692
gmp_int 128 |(int)0.0412168
gmp_int 128 &(int)0.0428359
gmp_int 128 ^(int)0.0418522
gmp_int 128 gcd 0.43131
gmp_int 256 + 0.0224834
gmp_int 256 - 0.025062
gmp_int 256 * 0.0417471
gmp_int 256 / 0.233656
gmp_int 256 str 0.00059903
gmp_int 256 +(int)0.0112071
gmp_int 256 -(int)0.0116302
gmp_int 256 *(int)0.0137181
gmp_int 256 /(int)0.0667669
gmp_int 256 % 0.191884
gmp_int 256 | 0.0129489
gmp_int 256 & 0.012778
gmp_int 256 ^ 0.0134548
gmp_int 256 << 0.0121471
gmp_int 256 >> 0.00832878
gmp_int 256 %(int)0.0474363
gmp_int 256 |(int)0.0425591
gmp_int 256 &(int)0.0436742
gmp_int 256 ^(int)0.0425636
gmp_int 256 gcd 2.06855
gmp_int 512 + 0.0277439
gmp_int 512 - 0.0318874
gmp_int 512 * 0.0991032
gmp_int 512 / 0.274993
gmp_int 512 str 0.00129458
gmp_int 512 +(int)0.014283
gmp_int 512 -(int)0.0149874
gmp_int 512 *(int)0.0180512
gmp_int 512 /(int)0.0906691
gmp_int 512 % 0.222477
gmp_int 512 | 0.0217103
gmp_int 512 & 0.0165285
gmp_int 512 ^ 0.0208848
gmp_int 512 << 0.014839
gmp_int 512 >> 0.00988994
gmp_int 512 %(int)0.0605682
gmp_int 512 |(int)0.0462909
gmp_int 512 &(int)0.046599
gmp_int 512 ^(int)0.0456608
gmp_int 512 gcd 4.68499
gmp_int 1024 + 0.0397479
gmp_int 1024 - 0.042232
gmp_int 1024 * 0.31703
gmp_int 1024 / 0.345984
gmp_int 1024 str 0.00271592
gmp_int 1024 +(int)0.0189969
gmp_int 1024 -(int)0.0195046
gmp_int 1024 *(int)0.0260306
gmp_int 1024 /(int)0.140151
gmp_int 1024 % 0.286399
gmp_int 1024 | 0.0261953
gmp_int 1024 & 0.023083
gmp_int 1024 ^ 0.0248084
gmp_int 1024 << 0.0202635
gmp_int 1024 >> 0.0127909
gmp_int 1024 %(int)0.0761102
gmp_int 1024 |(int)0.049175
gmp_int 1024 &(int)0.0499195
gmp_int 1024 ^(int)0.0487102
gmp_int 1024 gcd 10.1127
cpp_int 64 + 0.0152915
cpp_int 64 - 0.0191821
cpp_int 64 * 0.0326218
cpp_int 64 / 0.0951094
cpp_int 64 str 0.000428547
cpp_int 64 +(int)0.0132027
cpp_int 64 -(int)0.0126144
cpp_int 64 *(int)0.0151037
cpp_int 64 /(int)0.0491116
cpp_int 64 % 0.0951581
cpp_int 64 | 0.0199629
cpp_int 64 & 0.0196969
cpp_int 64 ^ 0.0208608
cpp_int 64 << 0.0179372
cpp_int 64 >> 0.0146206
cpp_int 64 %(int)0.0229261
cpp_int 64 |(int)0.0185797
cpp_int 64 &(int)0.0225055
cpp_int 64 ^(int)0.0191337
cpp_int 64 gcd 1.50205
cpp_int 128 + 0.0170788
cpp_int 128 - 0.0228373
cpp_int 128 * 0.0375831
cpp_int 128 / 0.163958
cpp_int 128 str 0.000744647
cpp_int 128 +(int)0.0144833
cpp_int 128 -(int)0.013922
cpp_int 128 *(int)0.0176402
cpp_int 128 /(int)0.0972057
cpp_int 128 % 0.169015
cpp_int 128 | 0.0229631
cpp_int 128 & 0.023126
cpp_int 128 ^ 0.0229278
cpp_int 128 << 0.0215749
cpp_int 128 >> 0.0149198
cpp_int 128 %(int)0.0476063
cpp_int 128 |(int)0.0194697
cpp_int 128 &(int)0.0270183
cpp_int 128 ^(int)0.0194481
cpp_int 128 gcd 3.36986
cpp_int 256 + 0.0231877
cpp_int 256 - 0.0293424
cpp_int 256 * 0.113247
cpp_int 256 / 0.336287
cpp_int 256 str 0.00190436
cpp_int 256 +(int)0.0161733
cpp_int 256 -(int)0.0173225
cpp_int 256 *(int)0.0199426
cpp_int 256 /(int)0.229286
cpp_int 256 % 0.306542
cpp_int 256 | 0.0257191
cpp_int 256 & 0.0254172
cpp_int 256 ^ 0.0259082
cpp_int 256 << 0.0253994
cpp_int 256 >> 0.0172635
cpp_int 256 %(int)0.116093
cpp_int 256 |(int)0.0233559
cpp_int 256 &(int)0.0367792
cpp_int 256 ^(int)0.0232914
cpp_int 256 gcd 7.88882
cpp_int 512 + 0.0291058
cpp_int 512 - 0.0380025
cpp_int 512 * 0.337161
cpp_int 512 / 0.487075
cpp_int 512 str 0.00494162
cpp_int 512 +(int)0.0201989
cpp_int 512 -(int)0.0200688
cpp_int 512 *(int)0.0311497
cpp_int 512 /(int)0.375279
cpp_int 512 % 0.459737
cpp_int 512 | 0.0297101
cpp_int 512 & 0.0297235
cpp_int 512 ^ 0.0296913
cpp_int 512 << 0.0328422
cpp_int 512 >> 0.0234706
cpp_int 512 %(int)0.194709
cpp_int 512 |(int)0.0258992
cpp_int 512 &(int)0.0529542
cpp_int 512 ^(int)0.0258749
cpp_int 512 gcd 19.7141
cpp_int 1024 + 0.0410101
cpp_int 1024 - 0.0576733
cpp_int 1024 * 1.19319
cpp_int 1024 / 0.850798
cpp_int 1024 str 0.0149378
cpp_int 1024 +(int)0.0222435
cpp_int 1024 -(int)0.0219408
cpp_int 1024 *(int)0.0435058
cpp_int 1024 /(int)0.6795
cpp_int 1024 % 0.800961
cpp_int 1024 | 0.0369613
cpp_int 1024 & 0.0368423
cpp_int 1024 ^ 0.0371252
cpp_int 1024 << 0.0474759
cpp_int 1024 >> 0.0297527
cpp_int 1024 %(int)0.360619
cpp_int 1024 |(int)0.0326194
cpp_int 1024 &(int)0.0801744
cpp_int 1024 ^(int)0.0319848
cpp_int 1024 gcd 53.3224
fixed_int 64 + 0.00207275
fixed_int 64 - 0.00214524
fixed_int 64 * 0.00391097
fixed_int 64 / 0.0608466
fixed_int 64 str 0.000292286
fixed_int 64 +(int)0.00357336
fixed_int 64 -(int)0.00352796
fixed_int 64 *(int)0.00292725
fixed_int 64 /(int)0.0243018
fixed_int 64 % 0.0603067
fixed_int 64 | 0.00258063
fixed_int 64 & 0.00257379
fixed_int 64 ^ 0.00258525
fixed_int 64 << 0.00134947
fixed_int 64 >> 0.00560378
fixed_int 64 %(int)0.0241499
fixed_int 64 |(int)0.00201939
fixed_int 64 &(int)0.00206716
fixed_int 64 ^(int)0.00201848
fixed_int 64 gcd 0.82127
fixed_int 128 + 0.00325349
fixed_int 128 - 0.00366953
fixed_int 128 * 0.010445
fixed_int 128 / 0.113697
fixed_int 128 str 0.000564877
fixed_int 128 +(int)0.00377625
fixed_int 128 -(int)0.00360179
fixed_int 128 *(int)0.00418426
fixed_int 128 /(int)0.091141
fixed_int 128 % 0.113804
fixed_int 128 | 0.00360961
fixed_int 128 & 0.00359913
fixed_int 128 ^ 0.00361317
fixed_int 128 << 0.0065905
fixed_int 128 >> 0.00654308
fixed_int 128 %(int)0.0809135
fixed_int 128 |(int)0.00237125
fixed_int 128 &(int)0.00231056
fixed_int 128 ^(int)0.00190464
fixed_int 128 gcd 2.05126
fixed_int 256 + 0.00785776
fixed_int 256 - 0.00635884
fixed_int 256 * 0.0323875
fixed_int 256 / 0.203194
fixed_int 256 str 0.0013816
fixed_int 256 +(int)0.00413397
fixed_int 256 -(int)0.00379699
fixed_int 256 *(int)0.00852456
fixed_int 256 /(int)0.183053
fixed_int 256 % 0.200368
fixed_int 256 | 0.0105747
fixed_int 256 & 0.0105856
fixed_int 256 ^ 0.0105755
fixed_int 256 << 0.00874545
fixed_int 256 >> 0.00906624
fixed_int 256 %(int)0.152826
fixed_int 256 |(int)0.00261619
fixed_int 256 &(int)0.00424202
fixed_int 256 ^(int)0.00263274
fixed_int 256 gcd 5.42715
fixed_int 512 + 0.0131311
fixed_int 512 - 0.0122513
fixed_int 512 * 0.205979
fixed_int 512 / 0.383601
fixed_int 512 str 0.0043558
fixed_int 512 +(int)0.00639746
fixed_int 512 -(int)0.00641876
fixed_int 512 *(int)0.0152369
fixed_int 512 /(int)0.363289
fixed_int 512 % 0.38201
fixed_int 512 | 0.0131075
fixed_int 512 & 0.0131292
fixed_int 512 ^ 0.01314
fixed_int 512 << 0.0130248
fixed_int 512 >> 0.0131451
fixed_int 512 %(int)0.304714
fixed_int 512 |(int)0.00574368
fixed_int 512 &(int)0.00810836
fixed_int 512 ^(int)0.00576694
fixed_int 512 gcd 16.6269
fixed_int 1024 + 0.0322386
fixed_int 1024 - 0.0312142
fixed_int 1024 * 0.716002
fixed_int 1024 / 0.728338
fixed_int 1024 str 0.0135445
fixed_int 1024 +(int)0.011986
fixed_int 1024 -(int)0.0119838
fixed_int 1024 *(int)0.0349878
fixed_int 1024 /(int)0.708856
fixed_int 1024 % 0.723622
fixed_int 1024 | 0.0181468
fixed_int 1024 & 0.0182648
fixed_int 1024 ^ 0.018185
fixed_int 1024 << 0.0252997
fixed_int 1024 >> 0.0257832
fixed_int 1024 %(int)0.597535
fixed_int 1024 |(int)0.0116417
fixed_int 1024 &(int)0.0172111
fixed_int 1024 ^(int)0.011526
fixed_int 1024 gcd 70.6396
[section:integer_performance Integer Type Perfomance]
[table Operator %
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.054413s)][[*1] (0.106105s)][[*1] (0.19685s)][1.67316 (0.385184s)][2.3543 (0.711308s)]]
[[gmp_int][3.04743 (0.16582s)][1.55485 (0.164977s)][1.00128 (0.197103s)][[*1] (0.230214s)][[*1] (0.302132s)]]
[[cpp_int][1.5779 (0.0951581s)][1.48514 (0.169015s)][1.59753 (0.306542s)][2.06645 (0.459737s)][2.79666 (0.800961s)]]
[[fixed_int][[*1] (0.0603067s)][[*1] (0.113804s)][1.04421 (0.200368s)][1.71708 (0.38201s)][2.52662 (0.723622s)]]
[[gmp_int][2.72898 (0.164576s)][1.41658 (0.161212s)][[*1] (0.191884s)][[*1] (0.222477s)][[*1] (0.286399s)]]
]
[table Operator %(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.0243407s)][1.99962 (0.0811764s)][2.96437 (0.15306s)][4.64875 (0.303051s)][7.31311 (0.584615s)]]
[[gmp_int][1.42913 (0.034786s)][[*1] (0.0405959s)][[*1] (0.0516333s)][[*1] (0.0651899s)][[*1] (0.0799406s)]]
[[cpp_int][[*1] (0.0229261s)][1.28944 (0.0476063s)][2.44735 (0.116093s)][3.21471 (0.194709s)][4.73812 (0.360619s)]]
[[fixed_int][1.05338 (0.0241499s)][2.19159 (0.0809135s)][3.22171 (0.152826s)][5.03092 (0.304714s)][7.85093 (0.597535s)]]
[[gmp_int][1.29749 (0.0297463s)][[*1] (0.03692s)][[*1] (0.0474363s)][[*1] (0.0605682s)][[*1] (0.0761102s)]]
]
[table Operator &
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00259593s)][[*1] (0.00361924s)][[*1] (0.0108415s)][[*1] (0.013122s)][[*1] (0.0176585s)]]
[[gmp_int][4.85187 (0.0125951s)][3.96768 (0.01436s)][1.43661 (0.015575s)][1.50716 (0.019777s)][1.50977 (0.0266602s)]]
[[cpp_int][7.65289 (0.0196969s)][6.42545 (0.023126s)][2.4011 (0.0254172s)][2.26393 (0.0297235s)][2.01712 (0.0368423s)]]
[[fixed_int][[*1] (0.00257379s)][[*1] (0.00359913s)][[*1] (0.0105856s)][[*1] (0.0131292s)][[*1] (0.0182648s)]]
[[gmp_int][3.71307 (0.00955666s)][3.15518 (0.0113559s)][1.2071 (0.012778s)][1.25891 (0.0165285s)][1.2638 (0.023083s)]]
]
[table Operator &(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00209559s)][[*1] (0.00245967s)][[*1] (0.00419648s)][[*1] (0.00836021s)][[*1] (0.0166854s)]]
[[gmp_int][21.0856 (0.0441868s)][18.4577 (0.0453998s)][11.1151 (0.0466442s)][5.96293 (0.0498514s)][3.23322 (0.0539474s)]]
[[cpp_int][10.8871 (0.0225055s)][11.6934 (0.0270183s)][8.67021 (0.0367792s)][6.53082 (0.0529542s)][4.65829 (0.0801744s)]]
[[fixed_int][[*1] (0.00206716s)][[*1] (0.00231056s)][[*1] (0.00424202s)][[*1] (0.00810836s)][[*1] (0.0172111s)]]
[[gmp_int][20.1865 (0.0417288s)][18.5392 (0.0428359s)][10.2956 (0.0436742s)][5.74703 (0.046599s)][2.90042 (0.0499195s)]]
]
[table Operator *
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00392745s)][[*1] (0.0104772s)][[*1] (0.0324122s)][1.95004 (0.201059s)][2.14731 (0.701951s)]]
[[gmp_int][2.96502 (0.011645s)][1.74194 (0.0182506s)][1.4714 (0.0476911s)][[*1] (0.103105s)][[*1] (0.326898s)]]
[[cpp_int][8.34111 (0.0326218s)][3.59818 (0.0375831s)][3.49662 (0.113247s)][3.40211 (0.337161s)][3.76364 (1.19319s)]]
[[fixed_int][[*1] (0.00391097s)][[*1] (0.010445s)][[*1] (0.0323875s)][2.07843 (0.205979s)][2.25847 (0.716002s)]]
[[gmp_int][2.87022 (0.0112253s)][1.54221 (0.0161084s)][1.28899 (0.0417471s)][[*1] (0.0991032s)][[*1] (0.31703s)]]
]
[table Operator *(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00294381s)][[*1] (0.00422148s)][[*1] (0.00849409s)][[*1] (0.015882s)][1.15522 (0.0346698s)]]
[[gmp_int][4.09319 (0.0120496s)][3.01026 (0.0127078s)][2.0089 (0.0170638s)][1.34479 (0.021358s)][[*1] (0.0300116s)]]
[[cpp_int][5.15967 (0.0151037s)][4.21584 (0.0176402s)][2.33943 (0.0199426s)][2.04436 (0.0311497s)][1.67133 (0.0435058s)]]
[[fixed_int][[*1] (0.00292725s)][[*1] (0.00418426s)][[*1] (0.00852456s)][[*1] (0.0152369s)][1.3441 (0.0349878s)]]
[[gmp_int][3.01114 (0.00881438s)][2.72791 (0.0114143s)][1.60924 (0.0137181s)][1.1847 (0.0180512s)][[*1] (0.0260306s)]]
]
[table Operator +
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00207163s)][[*1] (0.00326026s)][[*1] (0.00834722s)][[*1] (0.0128543s)][[*1] (0.0330379s)]]
[[gmp_int][8.08642 (0.0167521s)][5.89259 (0.0192114s)][2.76118 (0.0230482s)][2.19911 (0.028268s)][1.23787 (0.0408966s)]]
[[cpp_int][7.37741 (0.0152915s)][5.2494 (0.0170788s)][2.95092 (0.0231877s)][2.21655 (0.0291058s)][1.27208 (0.0410101s)]]
[[fixed_int][[*1] (0.00207275s)][[*1] (0.00325349s)][[*1] (0.00785776s)][[*1] (0.0131311s)][[*1] (0.0322386s)]]
[[gmp_int][7.99998 (0.016582s)][5.62745 (0.0183088s)][2.86129 (0.0224834s)][2.11283 (0.0277439s)][1.23293 (0.0397479s)]]
]
[table Operator +(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00358307s)][[*1] (0.00359962s)][[*1] (0.00405163s)][[*1] (0.00694047s)][[*1] (0.0116939s)]]
[[gmp_int][2.01857 (0.00723269s)][2.42047 (0.00871277s)][3.5813 (0.0145101s)][2.45162 (0.0170154s)][1.69017 (0.0197647s)]]
[[cpp_int][3.69474 (0.0132027s)][3.83536 (0.0144833s)][3.91229 (0.0161733s)][3.15733 (0.0201989s)][1.85579 (0.0222435s)]]
[[fixed_int][[*1] (0.00357336s)][[*1] (0.00377625s)][[*1] (0.00413397s)][[*1] (0.00639746s)][[*1] (0.011986s)]]
[[gmp_int][1.92643 (0.00688382s)][2.29418 (0.00866339s)][2.71097 (0.0112071s)][2.23261 (0.014283s)][1.58492 (0.0189969s)]]
]
[table Operator -
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00216403s)][[*1] (0.00372498s)][[*1] (0.00653903s)][[*1] (0.0120433s)][[*1] (0.0311489s)]]
[[gmp_int][8.72818 (0.0188881s)][5.89208 (0.0219479s)][4.43331 (0.0289896s)][2.92463 (0.0352221s)][1.48689 (0.0463151s)]]
[[cpp_int][8.94166 (0.0191821s)][6.22351 (0.0228373s)][4.61443 (0.0293424s)][3.10192 (0.0380025s)][1.84766 (0.0576733s)]]
[[fixed_int][[*1] (0.00214524s)][[*1] (0.00366953s)][[*1] (0.00635884s)][[*1] (0.0122513s)][[*1] (0.0312142s)]]
[[gmp_int][8.13505 (0.0174517s)][5.15777 (0.0189266s)][3.94128 (0.025062s)][2.60278 (0.0318874s)][1.35297 (0.042232s)]]
]
[table Operator -(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00354668s)][[*1] (0.00360689s)][[*1] (0.00385712s)][[*1] (0.00681002s)][[*1] (0.0116182s)]]
[[gmp_int][2.09194 (0.00741945s)][3.61625 (0.0130434s)][3.8458 (0.0148337s)][2.63767 (0.0179625s)][1.72107 (0.0199956s)]]
[[cpp_int][3.57555 (0.0126144s)][3.86529 (0.013922s)][4.56215 (0.0173225s)][3.12658 (0.0200688s)][1.83087 (0.0219408s)]]
[[fixed_int][[*1] (0.00352796s)][[*1] (0.00360179s)][[*1] (0.00379699s)][[*1] (0.00641876s)][[*1] (0.0119838s)]]
[[gmp_int][2.08226 (0.00734613s)][2.4833 (0.0089443s)][3.063 (0.0116302s)][2.33493 (0.0149874s)][1.62759 (0.0195046s)]]
]
[table Operator /
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.0556903s)][[*1] (0.105756s)][[*1] (0.198305s)][1.37248 (0.385977s)][1.91862 (0.708393s)]]
[[gmp_int][3.04721 (0.1697s)][1.85862 (0.196561s)][1.21304 (0.240552s)][[*1] (0.281226s)][[*1] (0.36922s)]]
[[cpp_int][1.5631 (0.0951094s)][1.44205 (0.163958s)][1.655 (0.336287s)][1.77123 (0.487075s)][2.45907 (0.850798s)]]
[[fixed_int][[*1] (0.0608466s)][[*1] (0.113697s)][[*1] (0.203194s)][1.39495 (0.383601s)][2.10512 (0.728338s)]]
[[gmp_int][2.80954 (0.170951s)][1.68671 (0.191775s)][1.14992 (0.233656s)][[*1] (0.274993s)][[*1] (0.345984s)]]
]
[table Operator /(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.0169012s)][1.11654 (0.0634475s)][1.86084 (0.127666s)][2.57379 (0.244657s)][4.79191 (0.692818s)]]
[[gmp_int][2.96468 (0.0501068s)][[*1] (0.0568248s)][[*1] (0.0686065s)][[*1] (0.0950571s)][[*1] (0.144581s)]]
[[cpp_int][2.0209 (0.0491116s)][1.81816 (0.0972057s)][3.43412 (0.229286s)][4.13899 (0.375279s)][4.84836 (0.6795s)]]
[[fixed_int][[*1] (0.0243018s)][1.70472 (0.091141s)][2.74167 (0.183053s)][4.00675 (0.363289s)][5.05782 (0.708856s)]]
[[gmp_int][1.91611 (0.0465651s)][[*1] (0.0534638s)][[*1] (0.0667669s)][[*1] (0.0906691s)][[*1] (0.140151s)]]
]
[table Operator <<
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00115455s)][[*1] (0.00632357s)][[*1] (0.00826823s)][[*1] (0.0150546s)][[*1] (0.0242721s)]]
[[gmp_int][8.39362 (0.00969083s)][2.07445 (0.0131179s)][1.80141 (0.0148945s)][1.21421 (0.0182795s)][1.02121 (0.0247868s)]]
[[cpp_int][13.292 (0.0179372s)][3.27363 (0.0215749s)][2.9043 (0.0253994s)][2.52151 (0.0328422s)][2.34293 (0.0474759s)]]
[[fixed_int][[*1] (0.00134947s)][[*1] (0.0065905s)][[*1] (0.00874545s)][[*1] (0.0130248s)][1.24854 (0.0252997s)]]
[[gmp_int][7.85814 (0.0106043s)][1.56732 (0.0103295s)][1.38897 (0.0121471s)][1.13928 (0.014839s)][[*1] (0.0202635s)]]
]
[table Operator >>
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00147407s)][[*1] (0.00238745s)][[*1] (0.00854822s)][1.10734 (0.0134889s)][1.52739 (0.0248274s)]]
[[gmp_int][8.85991 (0.0130601s)][4.4845 (0.0107065s)][1.30011 (0.0111136s)][[*1] (0.0121814s)][[*1] (0.0162548s)]]
[[cpp_int][2.60907 (0.0146206s)][2.28025 (0.0149198s)][2.07275 (0.0172635s)][2.37318 (0.0234706s)][2.32609 (0.0297527s)]]
[[fixed_int][[*1] (0.00560378s)][[*1] (0.00654308s)][1.08854 (0.00906624s)][1.32914 (0.0131451s)][2.01575 (0.0257832s)]]
[[gmp_int][1.67542 (0.0093887s)][1.24317 (0.00813413s)][[*1] (0.00832878s)][[*1] (0.00988994s)][[*1] (0.0127909s)]]
]
[table Operator ^
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00256688s)][[*1] (0.00361813s)][[*1] (0.0108455s)][[*1] (0.013116s)][[*1] (0.0177043s)]]
[[gmp_int][5.05409 (0.0129732s)][3.88746 (0.0140653s)][1.53751 (0.0166751s)][1.90691 (0.025011s)][1.69135 (0.0299441s)]]
[[cpp_int][8.06918 (0.0208608s)][6.34562 (0.0229278s)][2.44983 (0.0259082s)][2.25961 (0.0296913s)][2.04153 (0.0371252s)]]
[[fixed_int][[*1] (0.00258525s)][[*1] (0.00361317s)][[*1] (0.0105755s)][[*1] (0.01314s)][[*1] (0.018185s)]]
[[gmp_int][3.81916 (0.00987346s)][3.10299 (0.0112116s)][1.27226 (0.0134548s)][1.5894 (0.0208848s)][1.36422 (0.0248084s)]]
]
[table Operator ^(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00202777s)][[*1] (0.00237775s)][[*1] (0.0027653s)][[*1] (0.00608555s)][[*1] (0.0108555s)]]
[[gmp_int][21.821 (0.0442481s)][19.7034 (0.0468496s)][16.847 (0.0465869s)][8.16164 (0.049668s)][4.97188 (0.0539722s)]]
[[cpp_int][9.47925 (0.0191337s)][10.2109 (0.0194481s)][8.84686 (0.0232914s)][4.48677 (0.0258749s)][2.775 (0.0319848s)]]
[[fixed_int][[*1] (0.00201848s)][[*1] (0.00190464s)][[*1] (0.00263274s)][[*1] (0.00576694s)][[*1] (0.011526s)]]
[[gmp_int][20.1032 (0.0405779s)][21.9738 (0.0418522s)][16.1671 (0.0425636s)][7.91768 (0.0456608s)][4.2261 (0.0487102s)]]
]
[table Operator gcd
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[cpp_int][8.64165 (1.50205s)][7.81307 (3.36986s)][3.81369 (7.88882s)][4.20792 (19.7141s)][5.27284 (53.3224s)]]
[[fixed_int][4.72495 (0.82127s)][4.75589 (2.05126s)][2.62364 (5.42715s)][3.54898 (16.6269s)][6.98527 (70.6396s)]]
[[gmp_int][[*1] (0.173816s)][[*1] (0.43131s)][[*1] (2.06855s)][[*1] (4.68499s)][[*1] (10.1127s)]]
]
[table Operator str
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.000302762s)][[*1] (0.000500691s)][1.14936 (0.00111683s)][1.71055 (0.00286314s)][2.93313 (0.00872206s)]]
[[gmp_int][1.11188 (0.000336635s)][4.63553 (0.00232097s)][[*1] (0.000971703s)][[*1] (0.00167382s)][[*1] (0.00297363s)]]
[[cpp_int][1.46619 (0.000428547s)][1.98732 (0.000744647s)][3.17907 (0.00190436s)][3.81717 (0.00494162s)][5.50009 (0.0149378s)]]
[[fixed_int][[*1] (0.000292286s)][1.50755 (0.000564877s)][2.30639 (0.0013816s)][3.36465 (0.0043558s)][4.98706 (0.0135445s)]]
[[gmp_int][1.17587 (0.000343689s)][[*1] (0.000374699s)][[*1] (0.00059903s)][[*1] (0.00129458s)][[*1] (0.00271592s)]]
]
[table Operator |
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00257616s)][[*1] (0.00363433s)][[*1] (0.0108232s)][[*1] (0.0131341s)][[*1] (0.0176472s)]]
[[gmp_int][4.49789 (0.0115873s)][3.7058 (0.0134681s)][1.47085 (0.0159192s)][1.58756 (0.0208511s)][1.61398 (0.0284821s)]]
[[cpp_int][7.73565 (0.0199629s)][6.36166 (0.0229631s)][2.43214 (0.0257191s)][2.26665 (0.0297101s)][2.0368 (0.0369613s)]]
[[fixed_int][[*1] (0.00258063s)][[*1] (0.00360961s)][[*1] (0.0105747s)][[*1] (0.0131075s)][[*1] (0.0181468s)]]
[[gmp_int][3.9353 (0.0101555s)][2.96987 (0.0107201s)][1.22452 (0.0129489s)][1.65632 (0.0217103s)][1.44352 (0.0261953s)]]
]
[table Operator |(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[fixed_int][[*1] (0.00208078s)][[*1] (0.00190869s)][[*1] (0.00275195s)][[*1] (0.00618124s)][[*1] (0.0107899s)]]
[[gmp_int][20.4129 (0.0424747s)][23.0676 (0.0440289s)][17.2504 (0.0474723s)][7.98521 (0.0493584s)][4.87243 (0.0525727s)]]
]
[endsect]
[section:rational_performance Rational Type Perfomance]
[table Operator *
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.426868s)][[*1] (0.968054s)][[*1] (4.39195s)][[*1] (9.6344s)][[*1] (20.9879s)]]
]
[table Operator *(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.344178s)][[*1] (0.179899s)][[*1] (0.200539s)][[*1] (0.254142s)][[*1] (0.328602s)]]
]
[table Operator +
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.254473s)][[*1] (0.542374s)][[*1] (2.34795s)][[*1] (5.10523s)][[*1] (11.2331s)]]
]
[table Operator +(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.309729s)][[*1] (0.154116s)][[*1] (0.177483s)][[*1] (0.212807s)][[*1] (0.27756s)]]
]
[table Operator -
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.260331s)][[*1] (0.545764s)][[*1] (2.3565s)][[*1] (5.08802s)][[*1] (11.2446s)]]
]
[table Operator -(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.306598s)][[*1] (0.151187s)][[*1] (0.16783s)][[*1] (0.212048s)][[*1] (0.271845s)]]
]
[table Operator /
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (1.50105s)][[*1] (2.78757s)][[*1] (8.9203s)][[*1] (16.8502s)][[*1] (35.6472s)]]
]
[table Operator /(int)
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.32842s)][[*1] (0.184167s)][[*1] (0.206129s)][[*1] (0.262442s)][[*1] (0.350883s)]]
]
[table Operator str
[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
[[mpq_rational][[*1] (0.000927423s)][[*1] (0.00111655s)][[*1] (0.00175742s)][[*1] (0.00246714s)][[*1] (0.00550783s)]]
[[cpp_int][9.20066 (0.0185797s)][8.21071 (0.0194697s)][8.92746 (0.0233559s)][4.50916 (0.0258992s)][2.80194 (0.0326194s)]]
[[fixed_int][[*1] (0.00201939s)][[*1] (0.00237125s)][[*1] (0.00261619s)][[*1] (0.00574368s)][[*1] (0.0116417s)]]
[[gmp_int][19.9733 (0.0403338s)][17.3819 (0.0412168s)][16.2676 (0.0425591s)][8.05945 (0.0462909s)][4.22404 (0.049175s)]]
]
[endsect]
+5
View File
@@ -587,6 +587,11 @@ int main()
test<boost::multiprecision::cpp_int>("cpp_int", 256);
test<boost::multiprecision::cpp_int>("cpp_int", 512);
test<boost::multiprecision::cpp_int>("cpp_int", 1024);
test<boost::multiprecision::mp_number<boost::multiprecision::cpp_int_backend<128, true, void> > >("cpp_int(fixed)", 128);
test<boost::multiprecision::mp_number<boost::multiprecision::cpp_int_backend<256, true, void> > >("cpp_int(fixed)", 256);
test<boost::multiprecision::mp_number<boost::multiprecision::cpp_int_backend<512, true, void> > >("cpp_int(fixed)", 512);
test<boost::multiprecision::mp_number<boost::multiprecision::cpp_int_backend<1024, true, void> > >("cpp_int(fixed)", 1024);
#endif
#ifdef TEST_MPQ
test<boost::multiprecision::mpq_rational>("mpq_rational", 64);