|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r81416 - in sandbox/big_number: boost/multiprecision boost/multiprecision/detail libs/multiprecision/doc libs/multiprecision/doc/html libs/multiprecision/doc/html/boost_multiprecision libs/multiprecision/doc/html/boost_multiprecision/indexes libs/multiprecision/doc/html/boost_multiprecision/perf libs/multiprecision/performance
From: john_at_[hidden]
Date: 2012-11-18 11:06:52
Author: johnmaddock
Date: 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
New Revision: 81416
URL: http://svn.boost.org/trac/boost/changeset/81416
Log:
Update performance test results.
Added:
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html (contents, props changed)
sandbox/big_number/libs/multiprecision/performance/sf_performance.hpp (contents, props changed)
sandbox/big_number/libs/multiprecision/performance/voronoi_performance.cpp (contents, props changed)
Text files modified:
sandbox/big_number/boost/multiprecision/detail/no_et_ops.hpp | 132 +-
sandbox/big_number/boost/multiprecision/miller_rabin.hpp | 10
sandbox/big_number/boost/multiprecision/tommath.hpp | 9
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html | 4
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html | 4
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html | 4
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html | 4
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html | 22
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf.html | 8
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html | 1355 ++++++++++++++++++++--
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html | 199 +++
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html | 2349 +++++++++++++++++++++++++++++++++------
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html | 1215 +++++++++++++++++++-
sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html | 86
sandbox/big_number/libs/multiprecision/doc/html/index.html | 4
sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk | 630 +++++++---
sandbox/big_number/libs/multiprecision/performance/arithmetic_backend.hpp | 23
sandbox/big_number/libs/multiprecision/performance/miller_rabin_performance.cpp | 12
sandbox/big_number/libs/multiprecision/performance/performance_test-msvc-10.log | 1698 ++++++++++++++++++----------
sandbox/big_number/libs/multiprecision/performance/performance_test.cpp | 49
sandbox/big_number/libs/multiprecision/performance/sf_performance_basic.cpp | 4
21 files changed, 6293 insertions(+), 1528 deletions(-)
Modified: sandbox/big_number/boost/multiprecision/detail/no_et_ops.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/detail/no_et_ops.hpp (original)
+++ sandbox/big_number/boost/multiprecision/detail/no_et_ops.hpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -15,7 +15,7 @@
// NOTE: these operators have to be defined after the methods in default_ops.hpp.
//
template <class B>
-inline number<B, et_off> operator - (const number<B, et_off>& v)
+BOOST_FORCEINLINE number<B, et_off> operator - (const number<B, et_off>& v)
{
BOOST_STATIC_ASSERT_MSG(is_signed_number<B>::value, "Negating an unsigned type results in ill-defined behavior.");
number<B, et_off> result(v);
@@ -23,7 +23,7 @@
return BOOST_MP_MOVE(result);
}
template <class B>
-inline number<B, et_off> operator ~ (const number<B, et_off>& v)
+BOOST_FORCEINLINE number<B, et_off> operator ~ (const number<B, et_off>& v)
{
number<B, et_off> result;
eval_complement(result.backend(), v.backend());
@@ -33,7 +33,7 @@
// Addition:
//
template <class B>
-inline number<B, et_off> operator + (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator + (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_add;
@@ -41,7 +41,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator + (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -50,7 +50,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator + (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -62,7 +62,7 @@
// Subtraction:
//
template <class B>
-inline number<B, et_off> operator - (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator - (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_subtract;
@@ -70,7 +70,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator - (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -79,7 +79,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator - (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -91,7 +91,7 @@
// Multiply:
//
template <class B>
-inline number<B, et_off> operator * (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator * (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_multiply;
@@ -99,7 +99,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator * (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -108,7 +108,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator * (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -120,7 +120,7 @@
// divide:
//
template <class B>
-inline number<B, et_off> operator / (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator / (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_divide;
@@ -128,7 +128,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator / (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -137,7 +137,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator / (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -149,7 +149,7 @@
// modulus:
//
template <class B>
-inline number<B, et_off> operator % (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator % (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_modulus;
@@ -157,7 +157,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator % (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -166,7 +166,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator % (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -178,7 +178,7 @@
// Bitwise or:
//
template <class B>
-inline number<B, et_off> operator | (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator | (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_bitwise_or;
@@ -186,7 +186,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator | (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -195,7 +195,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator | (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -207,7 +207,7 @@
// Bitwise xor:
//
template <class B>
-inline number<B, et_off> operator ^ (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator ^ (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_bitwise_xor;
@@ -215,7 +215,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator ^ (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -224,7 +224,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator ^ (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -236,7 +236,7 @@
// Bitwise and:
//
template <class B>
-inline number<B, et_off> operator & (const number<B, et_off>& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator & (const number<B, et_off>& a, const number<B, et_off>& b)
{
number<B, et_off> result;
using default_ops::eval_bitwise_and;
@@ -244,7 +244,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator & (const number<B, et_off>& a, const V& b)
{
number<B, et_off> result;
@@ -253,7 +253,7 @@
return BOOST_MP_MOVE(result);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator & (const V& a, const number<B, et_off>& b)
{
number<B, et_off> result;
@@ -265,7 +265,7 @@
// shifts:
//
template <class B, class I>
-inline typename enable_if<is_integral<I>, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_integral<I>, number<B, et_off> >::type
operator << (const number<B, et_off>& a, const I& b)
{
number<B, et_off> result(a);
@@ -275,7 +275,7 @@
return BOOST_MP_MOVE(result);
}
template <class B, class I>
-inline typename enable_if<is_integral<I>, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_integral<I>, number<B, et_off> >::type
operator >> (const number<B, et_off>& a, const I& b)
{
number<B, et_off> result(a);
@@ -298,14 +298,14 @@
// semantics help a great deal in return by value, so performance is still pretty good...
//
template <class B>
-inline number<B, et_off> operator - (number<B, et_off>&& v)
+BOOST_FORCEINLINE number<B, et_off> operator - (number<B, et_off>&& v)
{
BOOST_STATIC_ASSERT_MSG(is_signed_number<B>::value, "Negating an unsigned type results in ill-defined behavior.");
v.backend().negate();
return static_cast<number<B, et_off>&&>(v);
}
template <class B>
-inline number<B, et_off> operator ~ (number<B, et_off>&& v)
+BOOST_FORCEINLINE number<B, et_off> operator ~ (number<B, et_off>&& v)
{
eval_complement(v.backend(), v.backend());
return static_cast<number<B, et_off>&&>(v);
@@ -314,28 +314,28 @@
// Addition:
//
template <class B>
-inline number<B, et_off> operator + (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator + (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_add;
eval_add(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B>
-inline number<B, et_off> operator + (const number<B, et_off>& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator + (const number<B, et_off>& a, number<B, et_off>&& b)
{
using default_ops::eval_add;
eval_add(b.backend(), a.backend());
return static_cast<number<B, et_off>&&>(b);
}
template <class B>
-inline number<B, et_off> operator + (number<B, et_off>&& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator + (number<B, et_off>&& a, number<B, et_off>&& b)
{
using default_ops::eval_add;
eval_add(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator + (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_add;
@@ -343,7 +343,7 @@
return static_cast<number<B, et_off>&&>(a);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator + (const V& a, number<B, et_off>&& b)
{
using default_ops::eval_add;
@@ -354,14 +354,14 @@
// Subtraction:
//
template <class B>
-inline number<B, et_off> operator - (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator - (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_subtract;
eval_subtract(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B>
-inline typename enable_if<is_signed_number<B>, number<B, et_off> >::type operator - (const number<B, et_off>& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE typename enable_if<is_signed_number<B>, number<B, et_off> >::type operator - (const number<B, et_off>& a, number<B, et_off>&& b)
{
using default_ops::eval_subtract;
eval_subtract(b.backend(), a.backend());
@@ -369,14 +369,14 @@
return static_cast<number<B, et_off>&&>(b);
}
template <class B>
-inline number<B, et_off> operator - (number<B, et_off>&& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator - (number<B, et_off>&& a, number<B, et_off>&& b)
{
using default_ops::eval_subtract;
eval_subtract(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator - (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_subtract;
@@ -384,7 +384,7 @@
return static_cast<number<B, et_off>&&>(a);
}
template <class V, class B>
-inline typename enable_if_c<(is_compatible_arithmetic_type<V, number<B, et_off> >::value && is_signed_number<B>::value), number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if_c<(is_compatible_arithmetic_type<V, number<B, et_off> >::value && is_signed_number<B>::value), number<B, et_off> >::type
operator - (const V& a, number<B, et_off>&& b)
{
using default_ops::eval_subtract;
@@ -396,28 +396,28 @@
// Multiply:
//
template <class B>
-inline number<B, et_off> operator * (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator * (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_multiply;
eval_multiply(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B>
-inline number<B, et_off> operator * (const number<B, et_off>& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator * (const number<B, et_off>& a, number<B, et_off>&& b)
{
using default_ops::eval_multiply;
eval_multiply(b.backend(), a.backend());
return static_cast<number<B, et_off>&&>(b);
}
template <class B>
-inline number<B, et_off> operator * (number<B, et_off>&& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator * (number<B, et_off>&& a, number<B, et_off>&& b)
{
using default_ops::eval_multiply;
eval_multiply(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator * (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_multiply;
@@ -425,7 +425,7 @@
return static_cast<number<B, et_off>&&>(a);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator * (const V& a, number<B, et_off>&& b)
{
using default_ops::eval_multiply;
@@ -436,14 +436,14 @@
// divide:
//
template <class B>
-inline number<B, et_off> operator / (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator / (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_divide;
eval_divide(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator / (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_divide;
@@ -454,14 +454,14 @@
// modulus:
//
template <class B>
-inline number<B, et_off> operator % (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator % (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_modulus;
eval_modulus(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator % (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_modulus;
@@ -472,28 +472,28 @@
// Bitwise or:
//
template <class B>
-inline number<B, et_off> operator | (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator | (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_bitwise_or;
eval_bitwise_or(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B>
-inline number<B, et_off> operator | (const number<B, et_off>& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator | (const number<B, et_off>& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_or;
eval_bitwise_or(b.backend(), a.backend());
return static_cast<number<B, et_off>&&>(b);
}
template <class B>
-inline number<B, et_off> operator | (number<B, et_off>&& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator | (number<B, et_off>&& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_or;
eval_bitwise_or(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator | (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_bitwise_or;
@@ -501,7 +501,7 @@
return static_cast<number<B, et_off>&&>(a);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator | (const V& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_or;
@@ -512,28 +512,28 @@
// Bitwise xor:
//
template <class B>
-inline number<B, et_off> operator ^ (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator ^ (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_bitwise_xor;
eval_bitwise_xor(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B>
-inline number<B, et_off> operator ^ (const number<B, et_off>& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator ^ (const number<B, et_off>& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_xor;
eval_bitwise_xor(b.backend(), a.backend());
return static_cast<number<B, et_off>&&>(b);
}
template <class B>
-inline number<B, et_off> operator ^ (number<B, et_off>&& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator ^ (number<B, et_off>&& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_xor;
eval_bitwise_xor(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator ^ (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_bitwise_xor;
@@ -541,7 +541,7 @@
return static_cast<number<B, et_off>&&>(a);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator ^ (const V& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_xor;
@@ -552,28 +552,28 @@
// Bitwise and:
//
template <class B>
-inline number<B, et_off> operator & (number<B, et_off>&& a, const number<B, et_off>& b)
+BOOST_FORCEINLINE number<B, et_off> operator & (number<B, et_off>&& a, const number<B, et_off>& b)
{
using default_ops::eval_bitwise_and;
eval_bitwise_and(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B>
-inline number<B, et_off> operator & (const number<B, et_off>& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator & (const number<B, et_off>& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_and;
eval_bitwise_and(b.backend(), a.backend());
return static_cast<number<B, et_off>&&>(b);
}
template <class B>
-inline number<B, et_off> operator & (number<B, et_off>&& a, number<B, et_off>&& b)
+BOOST_FORCEINLINE number<B, et_off> operator & (number<B, et_off>&& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_and;
eval_bitwise_and(a.backend(), b.backend());
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class V>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator & (number<B, et_off>&& a, const V& b)
{
using default_ops::eval_bitwise_and;
@@ -581,7 +581,7 @@
return static_cast<number<B, et_off>&&>(a);
}
template <class V, class B>
-inline typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_compatible_arithmetic_type<V, number<B, et_off> >, number<B, et_off> >::type
operator & (const V& a, number<B, et_off>&& b)
{
using default_ops::eval_bitwise_and;
@@ -592,7 +592,7 @@
// shifts:
//
template <class B, class I>
-inline typename enable_if<is_integral<I>, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_integral<I>, number<B, et_off> >::type
operator << (number<B, et_off>&& a, const I& b)
{
using default_ops::eval_left_shift;
@@ -600,7 +600,7 @@
return static_cast<number<B, et_off>&&>(a);
}
template <class B, class I>
-inline typename enable_if<is_integral<I>, number<B, et_off> >::type
+BOOST_FORCEINLINE typename enable_if<is_integral<I>, number<B, et_off> >::type
operator >> (number<B, et_off>&& a, const I& b)
{
using default_ops::eval_right_shift;
Modified: sandbox/big_number/boost/multiprecision/miller_rabin.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/miller_rabin.hpp (original)
+++ sandbox/big_number/boost/multiprecision/miller_rabin.hpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -144,10 +144,10 @@
#endif
typedef I number_type;
+ if(bit_test(n, 0) == 0)
+ return false; // n is even
if(n <= 227)
return detail::is_small_prime(detail::cast_to_unsigned(n));
- if((n & 1) == 0)
- return false;
if(!detail::check_small_factors(n))
return false;
@@ -177,10 +177,14 @@
unsigned j = 0;
while(true)
{
- if((y == nm1) || ((y == 1) && (j == 0)))
+ if(y == nm1)
break;
if(y == 1)
+ {
+ if(j == 0)
+ break;
return false; // test failed
+ }
if(++j == k)
return false; // failed
y = powm(y, 2, n);
Modified: sandbox/big_number/boost/multiprecision/tommath.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/tommath.hpp (original)
+++ sandbox/big_number/boost/multiprecision/tommath.hpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -579,6 +579,15 @@
{
detail::check_tommath_result(mp_lcm(const_cast< ::mp_int*>(&a.data()), const_cast< ::mp_int*>(&b.data()), const_cast< ::mp_int*>(&result.data())));
}
+inline void eval_powm(tommath_int& result, const tommath_int& base, const tommath_int& p, const tommath_int& m)
+{
+ if(eval_get_sign(p) < 0)
+ {
+ BOOST_THROW_EXCEPTION(std::runtime_error("powm requires a positive exponent."));
+ }
+ detail::check_tommath_result(mp_exptmod(const_cast< ::mp_int*>(&base.data()), const_cast< ::mp_int*>(&p.data()), const_cast< ::mp_int*>(&m.data()), &result.data()));
+}
+
inline void eval_qr(const tommath_int& x, const tommath_int& y,
tommath_int& q, tommath_int& r)
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -13,9 +13,9 @@
<div class="spirit-nav">
<a accesskey="p" href="../indexes.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="s02.html"><img src="../../images/next.png" alt="Next"></a>
</div>
-<div class="section id988910">
+<div class="section id965816">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id988910"></a>Function Index</h3></div></div></div>
+<a name="id965816"></a>Function Index</h3></div></div></div>
<p><a class="link" href="s01.html#idx_id_0">A</a> <a class="link" href="s01.html#idx_id_1">B</a> <a class="link" href="s01.html#idx_id_2">C</a> <a class="link" href="s01.html#idx_id_3">D</a> <a class="link" href="s01.html#idx_id_4">E</a> <a class="link" href="s01.html#idx_id_5">F</a> <a class="link" href="s01.html#idx_id_7">I</a> <a class="link" href="s01.html#idx_id_8">L</a> <a class="link" href="s01.html#idx_id_9">M</a> <a class="link" href="s01.html#idx_id_12">P</a> <a class="link" href="s01.html#idx_id_13">R</a> <a class="link" href="s01.html#idx_id_14">S</a> <a class="link" href="s01.html#idx_id_15">T</a> <a class="link" href="s01.html#idx_id_17">Z</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -13,9 +13,9 @@
<div class="spirit-nav">
<a accesskey="p" href="s01.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="s03.html"><img src="../../images/next.png" alt="Next"></a>
</div>
-<div class="section id994045">
+<div class="section id969283">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id994045"></a>Class Index</h3></div></div></div>
+<a name="id969283"></a>Class Index</h3></div></div></div>
<p><a class="link" href="s02.html#idx_id_20">C</a> <a class="link" href="s02.html#idx_id_22">E</a> <a class="link" href="s02.html#idx_id_24">G</a> <a class="link" href="s02.html#idx_id_25">I</a> <a class="link" href="s02.html#idx_id_27">M</a> <a class="link" href="s02.html#idx_id_28">N</a> <a class="link" href="s02.html#idx_id_33">T</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -13,9 +13,9 @@
<div class="spirit-nav">
<a accesskey="p" href="s02.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="s04.html"><img src="../../images/next.png" alt="Next"></a>
</div>
-<div class="section id994462">
+<div class="section id969700">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id994462"></a>Typedef Index</h3></div></div></div>
+<a name="id969700"></a>Typedef Index</h3></div></div></div>
<p><a class="link" href="s03.html#idx_id_38">C</a> <a class="link" href="s03.html#idx_id_43">I</a> <a class="link" href="s03.html#idx_id_44">L</a> <a class="link" href="s03.html#idx_id_45">M</a> <a class="link" href="s03.html#idx_id_50">S</a> <a class="link" href="s03.html#idx_id_51">T</a> <a class="link" href="s03.html#idx_id_52">U</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -12,9 +12,9 @@
<div class="spirit-nav">
<a accesskey="p" href="s03.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a>
</div>
-<div class="section id995462">
+<div class="section id972375">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id995462"></a>Index</h3></div></div></div>
+<a name="id972375"></a>Index</h3></div></div></div>
<p><a class="link" href="s04.html#idx_id_54">A</a> <a class="link" href="s04.html#idx_id_55">B</a> <a class="link" href="s04.html#idx_id_56">C</a> <a class="link" href="s04.html#idx_id_57">D</a> <a class="link" href="s04.html#idx_id_58">E</a> <a class="link" href="s04.html#idx_id_59">F</a> <a class="link" href="s04.html#idx_id_60">G</a> <a class="link" href="s04.html#idx_id_61">I</a> <a class="link" href="s04.html#idx_id_62">L</a> <a class="link" href="s04.html#idx_id_63">M</a> <a class="link" href="s04.html#idx_id_64">N</a> <a class="link" href="s04.html#idx_id_65">O</a> <a class="link" href="s04.html#idx_id_66">P</a> <a class="link" href="s04.html#idx_id_67">R</a> <a class="link" href="s04.html#idx_id_68">S</a> <a class="link" href="s04.html#idx_id_69">T</a> <a class="link" href="s04.html#idx_id_70">U</a> <a class="link" href="s04.html#idx_id_71">Z</a></p>
<div class="variablelist"><dl class="variablelist">
<dt>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/intro.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -376,7 +376,7 @@
</td>
<td>
<p>
- 1.0 (0.00793s)
+ 1.0 (0.00957s)
</p>
</td>
<td>
@@ -393,7 +393,7 @@
</td>
<td>
<p>
- 1.2 (0.00931s)
+ 1.1 (0.0102s)
</p>
</td>
<td>
@@ -410,7 +410,7 @@
</td>
<td>
<p>
- 1.9 (0.0148s)
+ 1.6 (0.0151s)
</p>
</td>
<td>
@@ -490,7 +490,7 @@
</td>
<td>
<p>
- 1.0 (5.66s)
+ 1.0 (5.78s)
</p>
</td>
<td>
@@ -508,7 +508,7 @@
</td>
<td>
<p>
- 1.10 (6.25s)
+ 1.1 (6.29s)
</p>
</td>
<td>
@@ -525,7 +525,7 @@
</td>
<td>
<p>
- 1.09 (6.16s)
+ 1.1 (6.28s)
</p>
</td>
<td>
@@ -542,7 +542,7 @@
</td>
<td>
<p>
- 1.65 (9.34s)
+ 1.65 (9.54s)
</p>
</td>
<td>
@@ -588,7 +588,7 @@
</td>
<td>
<p>
- 1.0 (257s)
+ 1.0 (263s)
</p>
</td>
<td>
@@ -606,7 +606,7 @@
</td>
<td>
<p>
- 1.0 (257s)
+ 1.0 (260s)
</p>
</td>
<td>
@@ -623,7 +623,7 @@
</td>
<td>
<p>
- 1.1 (280s)
+ 1.1 (287s)
</p>
</td>
<td>
@@ -640,7 +640,7 @@
</td>
<td>
<p>
- 1.4 (363s)
+ 1.5 (389s)
</p>
</td>
<td>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -7,17 +7,19 @@
<link rel="home" href="../index.html" title="Chapter 1. Boost.Multiprecision">
<link rel="up" href="../index.html" title="Chapter 1. Boost.Multiprecision">
<link rel="prev" href="ref/headers.html" title="Header File Structure">
-<link rel="next" href="perf/realworld.html" title="Floating Point Real World Tests">
+<link rel="next" href="perf/overhead.html" title="The Overhead in the Number Class Wrapper">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
-<a accesskey="p" href="ref/headers.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="perf/realworld.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="ref/headers.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="perf/overhead.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section boost_multiprecision_perf">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_multiprecision.perf"></a><a class="link" href="perf.html" title="Performance Comparison">Performance Comparison</a>
</h2></div></div></div>
<div class="toc"><dl>
+<dt><span class="section"><a href="perf/overhead.html">The Overhead in the
+ Number Class Wrapper</a></span></dt>
<dt><span class="section"><a href="perf/realworld.html">Floating Point Real
World Tests</a></span></dt>
<dt><span class="section"><a href="perf/int_real_world.html">Integer Real
@@ -40,7 +42,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="ref/headers.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="perf/realworld.html"><img src="../images/next.png" alt="Next"></a>
+<a accesskey="p" href="ref/headers.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="perf/overhead.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -49,17 +49,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -72,17 +72,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.02382s)
+ <span class="bold"><strong>1</strong></span> (0.0575156s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0294619s)
+ <span class="bold"><strong>1</strong></span> (0.0740086s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.058466s)
+ <span class="bold"><strong>1</strong></span> (0.219073s)
</p>
</td>
</tr>
@@ -94,17 +94,17 @@
</td>
<td>
<p>
- 4.55086 (0.108402s)
+ 2.45065 (0.14095s)
</p>
</td>
<td>
<p>
- 3.86443 (0.113853s)
+ 2.01398 (0.149052s)
</p>
</td>
<td>
<p>
- 2.6241 (0.15342s)
+ 1.09608 (0.240122s)
</p>
</td>
</tr>
@@ -116,17 +116,17 @@
</td>
<td>
<p>
- 2.52036 (0.060035s)
+ 2.6001 (0.149546s)
</p>
</td>
<td>
<p>
- 2.1833 (0.0643242s)
+ 2.12079 (0.156957s)
</p>
</td>
<td>
<p>
- 1.37736 (0.0805287s)
+ 1.09078 (0.23896s)
</p>
</td>
</tr>
@@ -150,17 +150,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -173,17 +173,17 @@
</td>
<td>
<p>
- 1.56759 (0.0527023s)
+ 1.46115 (0.0855392s)
</p>
</td>
<td>
<p>
- 1.74629 (0.0618102s)
+ 2.60353 (0.114398s)
</p>
</td>
<td>
<p>
- 1.68077 (0.105927s)
+ 3.62562 (0.264905s)
</p>
</td>
</tr>
@@ -195,17 +195,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0336201s)
+ <span class="bold"><strong>1</strong></span> (0.0585424s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0353951s)
+ <span class="bold"><strong>1</strong></span> (0.0439398s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0630232s)
+ <span class="bold"><strong>1</strong></span> (0.0730648s)
</p>
</td>
</tr>
@@ -217,17 +217,17 @@
</td>
<td>
<p>
- 3.14875 (0.105861s)
+ 2.40441 (0.14076s)
</p>
</td>
<td>
<p>
- 3.15499 (0.111671s)
+ 3.2877 (0.144461s)
</p>
</td>
<td>
<p>
- 1.92831 (0.121528s)
+ 2.40379 (0.175632s)
</p>
</td>
</tr>
@@ -235,7 +235,209 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator0"></a><p class="title"><b>Table 1.12. Operator -</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator___unsigned_long_long_"></a><p class="title"><b>Table 1.12. Operator +(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.118146s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.144714s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.315639s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 4.5555 (0.538213s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.83096 (0.554395s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.95079 (0.615745s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 5.74477 (0.678719s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.85295 (0.702291s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.70354 (0.853342s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator____unsigned_long_long_"></a><p class="title"><b>Table 1.13. Operator +=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.101188s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.122394s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.251975s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 5.199 (0.526079s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.39327 (0.537712s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.42151 (0.610159s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 6.08318 (0.615547s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.18525 (0.634645s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.1022 (0.781677s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator0"></a><p class="title"><b>Table 1.14. Operator -</b></p>
<div class="table-contents"><table class="table" summary="Operator -">
<colgroup>
<col>
@@ -251,17 +453,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -274,17 +476,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0265783s)
+ <span class="bold"><strong>1</strong></span> (0.0895163s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.031465s)
+ <span class="bold"><strong>1</strong></span> (0.129248s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0619405s)
+ 1.5088 (0.374512s)
</p>
</td>
</tr>
@@ -296,17 +498,17 @@
</td>
<td>
<p>
- 4.66954 (0.124108s)
+ 1.72566 (0.154474s)
</p>
</td>
<td>
<p>
- 3.72645 (0.117253s)
+ 1.22567 (0.158415s)
</p>
</td>
<td>
<p>
- 2.67536 (0.165713s)
+ <span class="bold"><strong>1</strong></span> (0.248219s)
</p>
</td>
</tr>
@@ -318,17 +520,17 @@
</td>
<td>
<p>
- 2.7909 (0.0741774s)
+ 1.83764 (0.164499s)
</p>
</td>
<td>
<p>
- 2.48557 (0.0782083s)
+ 1.34284 (0.173559s)
</p>
</td>
<td>
<p>
- 1.50944 (0.0934957s)
+ 1.00226 (0.248781s)
</p>
</td>
</tr>
@@ -336,7 +538,7 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_int0"></a><p class="title"><b>Table 1.13. Operator -(int)</b></p>
+<a name="boost_multiprecision.perf.float_performance.operator_int0"></a><p class="title"><b>Table 1.15. Operator -(int)</b></p>
<div class="table-contents"><table class="table" summary="Operator -(int)">
<colgroup>
<col>
@@ -352,17 +554,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -375,17 +577,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0577674s)
+ <span class="bold"><strong>1</strong></span> (0.105285s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0633795s)
+ <span class="bold"><strong>1</strong></span> (0.142741s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.11146s)
+ <span class="bold"><strong>1</strong></span> (0.278718s)
</p>
</td>
</tr>
@@ -397,17 +599,17 @@
</td>
<td>
<p>
- 2.31811 (0.133911s)
+ 2.34437 (0.246828s)
</p>
</td>
<td>
<p>
- 2.07251 (0.131355s)
+ 1.28814 (0.183871s)
</p>
</td>
<td>
<p>
- 1.67161 (0.186319s)
+ 1.00731 (0.280754s)
</p>
</td>
</tr>
@@ -419,17 +621,17 @@
</td>
<td>
<p>
- 2.45081 (0.141577s)
+ 2.8032 (0.295136s)
</p>
</td>
<td>
<p>
- 2.29174 (0.145249s)
+ 2.09178 (0.298582s)
</p>
</td>
<td>
<p>
- 1.395 (0.155487s)
+ 1.25213 (0.34899s)
</p>
</td>
</tr>
@@ -437,8 +639,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator1"></a><p class="title"><b>Table 1.14. Operator *</b></p>
-<div class="table-contents"><table class="table" summary="Operator *">
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table 1.16. Operator -(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
<colgroup>
<col>
<col>
@@ -453,17 +655,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -476,17 +678,17 @@
</td>
<td>
<p>
- 1.07276 (0.287898s)
+ <span class="bold"><strong>1</strong></span> (0.13719s)
</p>
</td>
<td>
<p>
- 1.47724 (0.584569s)
+ <span class="bold"><strong>1</strong></span> (0.184428s)
</p>
</td>
<td>
<p>
- 1.55145 (5.09969s)
+ <span class="bold"><strong>1</strong></span> (0.344212s)
</p>
</td>
</tr>
@@ -498,17 +700,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.268372s)
+ 4.0804 (0.559791s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.395718s)
+ 3.06776 (0.565781s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (3.28705s)
+ 2.07736 (0.715053s)
</p>
</td>
</tr>
@@ -520,17 +722,17 @@
</td>
<td>
<p>
- 1.27302 (0.341642s)
+ 5.10114 (0.699828s)
</p>
</td>
<td>
<p>
- 1.17649 (0.465557s)
+ 3.88684 (0.716843s)
</p>
</td>
<td>
<p>
- 1.14029 (3.7482s)
+ 2.50074 (0.860784s)
</p>
</td>
</tr>
@@ -538,8 +740,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_int1"></a><p class="title"><b>Table 1.15. Operator *(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator *(int)">
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table 1.17. Operator -=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
<colgroup>
<col>
<col>
@@ -554,17 +756,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -577,17 +779,17 @@
</td>
<td>
<p>
- 2.89945 (0.11959s)
+ <span class="bold"><strong>1</strong></span> (0.100984s)
</p>
</td>
<td>
<p>
- 4.56335 (0.197945s)
+ <span class="bold"><strong>1</strong></span> (0.123148s)
</p>
</td>
<td>
<p>
- 9.03602 (0.742044s)
+ <span class="bold"><strong>1</strong></span> (0.246181s)
</p>
</td>
</tr>
@@ -599,17 +801,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0412457s)
+ 5.68353 (0.573944s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0433772s)
+ 4.68636 (0.577116s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0821206s)
+ 2.6958 (0.663655s)
</p>
</td>
</tr>
@@ -621,17 +823,17 @@
</td>
<td>
<p>
- 3.6951 (0.152407s)
+ 6.19738 (0.625834s)
</p>
</td>
<td>
<p>
- 3.71977 (0.161353s)
+ 5.18544 (0.638577s)
</p>
</td>
<td>
<p>
- 3.30958 (0.271785s)
+ 3.18738 (0.784673s)
</p>
</td>
</tr>
@@ -639,8 +841,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator2"></a><p class="title"><b>Table 1.16. Operator /</b></p>
-<div class="table-contents"><table class="table" summary="Operator /">
+<a name="boost_multiprecision.perf.float_performance.operator1"></a><p class="title"><b>Table 1.18. Operator *</b></p>
+<div class="table-contents"><table class="table" summary="Operator *">
<colgroup>
<col>
<col>
@@ -655,17 +857,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -678,17 +880,17 @@
</td>
<td>
<p>
- 3.24327 (4.00108s)
+ 1.03667 (0.284251s)
</p>
</td>
<td>
<p>
- 5.00532 (8.12985s)
+ 1.30576 (0.536527s)
</p>
</td>
<td>
<p>
- 6.79566 (54.2796s)
+ 1.44686 (4.81057s)
</p>
</td>
</tr>
@@ -700,17 +902,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.23366s)
+ <span class="bold"><strong>1</strong></span> (0.274196s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.62424s)
+ <span class="bold"><strong>1</strong></span> (0.410891s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (7.9874s)
+ <span class="bold"><strong>1</strong></span> (3.32484s)
</p>
</td>
</tr>
@@ -722,17 +924,17 @@
</td>
<td>
<p>
- 1.32521 (1.63486s)
+ 1.24537 (0.341477s)
</p>
</td>
<td>
<p>
- 1.38967 (2.25716s)
+ 1.15785 (0.475749s)
</p>
</td>
<td>
<p>
- 1.72413 (13.7713s)
+ 1.1796 (3.92199s)
</p>
</td>
</tr>
@@ -740,8 +942,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_int2"></a><p class="title"><b>Table 1.17. Operator /(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator /(int)">
+<a name="boost_multiprecision.perf.float_performance.operator_int1"></a><p class="title"><b>Table 1.19. Operator *(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(int)">
<colgroup>
<col>
<col>
@@ -756,17 +958,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -779,17 +981,17 @@
</td>
<td>
<p>
- 1.45093 (0.253675s)
+ 3.97453 (0.240262s)
</p>
</td>
<td>
<p>
- 1.83306 (0.419569s)
+ 9.91222 (0.463473s)
</p>
</td>
<td>
<p>
- 2.3644 (1.64187s)
+ 50.7926 (4.36527s)
</p>
</td>
</tr>
@@ -801,17 +1003,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.174836s)
+ <span class="bold"><strong>1</strong></span> (0.0604505s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.22889s)
+ <span class="bold"><strong>1</strong></span> (0.0467577s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.694411s)
+ <span class="bold"><strong>1</strong></span> (0.0859431s)
</p>
</td>
</tr>
@@ -823,17 +1025,17 @@
</td>
<td>
<p>
- 1.16731 (0.204088s)
+ 2.56974 (0.155342s)
</p>
</td>
<td>
<p>
- 1.13211 (0.259127s)
+ 3.56312 (0.166603s)
</p>
</td>
<td>
<p>
- 1.02031 (0.708513s)
+ 3.22964 (0.277565s)
</p>
</td>
</tr>
@@ -841,8 +1043,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.float_performance.operator_str"></a><p class="title"><b>Table 1.18. Operator str</b></p>
-<div class="table-contents"><table class="table" summary="Operator str">
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table 1.20. Operator *(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
<colgroup>
<col>
<col>
@@ -857,17 +1059,17 @@
</th>
<th>
<p>
- 50 Decimal Digits
+ 50 Bits
</p>
</th>
<th>
<p>
- 100 Decimal Digits
+ 100 Bits
</p>
</th>
<th>
<p>
- 500 Decimal Digits
+ 500 Bits
</p>
</th>
</tr></thead>
@@ -880,17 +1082,17 @@
</td>
<td>
<p>
- 1.4585 (0.0188303s)
+ <span class="bold"><strong>1</strong></span> (0.331877s)
</p>
</td>
<td>
<p>
- 1.55515 (0.03172s)
+ 1.01058 (0.586122s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.131962s)
+ 6.688 (4.7931s)
</p>
</td>
</tr>
@@ -902,17 +1104,17 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0129107s)
+ 1.72433 (0.572266s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0203967s)
+ <span class="bold"><strong>1</strong></span> (0.579987s)
</p>
</td>
<td>
<p>
- 1.04632 (0.138075s)
+ <span class="bold"><strong>1</strong></span> (0.716672s)
</p>
</td>
</tr>
@@ -924,26 +1126,933 @@
</td>
<td>
<p>
- 2.19015 (0.0282764s)
+ 2.5553 (0.848047s)
</p>
</td>
<td>
<p>
- 1.84679 (0.0376683s)
+ 1.74987 (1.0149s)
</p>
</td>
<td>
<p>
- 1.20295 (0.158743s)
+ 1.80403 (1.2929s)
</p>
</td>
</tr>
</tbody>
</table></div>
</div>
-<br class="table-break"><p>
- ]
- </p>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table 1.21. Operator *=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.321397s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.00772 (0.574887s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.65946 (4.7468s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.77419 (0.570218s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.570482s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.712791s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.62172 (0.842611s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.77691 (1.01369s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.77511 (1.26528s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator2"></a><p class="title"><b>Table 1.22. Operator /</b></p>
+<div class="table-contents"><table class="table" summary="Operator /">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.96096 (4.00777s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.53244 (7.86435s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.11936 (51.5509s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.35354s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.73512s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (8.42422s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.30002 (1.75963s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.39045 (2.41261s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.66762 (14.0484s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_int2"></a><p class="title"><b>Table 1.23. Operator /(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 8.60726 (1.8181s)
+ </p>
+ </td>
+<td>
+ <p>
+ 15.4122 (3.67479s)
+ </p>
+ </td>
+<td>
+ <p>
+ 34.5119 (24.729s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24394 (0.262756s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.238433s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.716536s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.211229s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.12178 (0.26747s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.02237 (0.732562s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table 1.24. Operator /(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.10976 (1.97569s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.73601 (3.9133s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.3085 (25.4533s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.936452s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.04746s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.25081s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3423 (1.257s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.51575 (1.58768s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.31513 (7.46175s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table 1.25. Operator /=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.17401 (1.96883s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.79591 (3.8965s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.2328 (25.2606s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.905621s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.0265s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.24882s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.37953 (1.24933s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.53073 (1.57129s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.30546 (7.43339s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_construct"></a><p class="title"><b>Table 1.26. Operator construct</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00929804s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0268321s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0310685s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 30.8781 (0.287106s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.59969 (0.203916s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.51873 (0.202527s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 23.5296 (0.218779s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.11058 (0.217624s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.16325 (0.222552s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned_"></a><p class="title"><b>Table 1.27. Operator construct(unsigned)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0603971s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0735485s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.116464s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 3.91573 (0.236498s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.88171 (0.211945s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.81075 (0.210887s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 4.90052 (0.295977s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.01118 (0.295017s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.62005 (0.305141s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_construct_unsigned_long_long_"></a><p class="title"><b>Table 1.28. Operator construct(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0610288s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0759005s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.118511s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 8.26247 (0.504249s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.69042 (0.507806s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.32819 (0.51294s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 10.1593 (0.620013s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.45884 (0.64203s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.51472 (0.653557s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.float_performance.operator_str"></a><p class="title"><b>Table 1.29. Operator str</b></p>
+<div class="table-contents"><table class="table" summary="Operator str">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.95848 (0.0223061s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.33461 (0.033471s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.0159 (0.132732s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00753971s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0100374s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0440106s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.25424 (0.00945658s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24943 (0.012541s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09428 (0.0481601s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break">
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -19,15 +19,18 @@
World Tests</a>
</h3></div></div></div>
<p>
- These tests
- measure the time taken to generate 1000 128-bit random numbers and test for
- primality using the Miller Rabin test.
- </p>
-<p>
Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
turned on (/Ox), and used MPIR-2.3.0 and libtommath-0.42.0.
The tests were run on 32-bit Windows Vista machine.
</p>
+<p>
+ The first set of tests
+ measure the times taken to execute the multiprecision part of the Voronoi-diagram
+ builder from Boost.Polygon. The tests mainly create a large number of temporaries
+ "just in case" multiprecision arithmetic is required, for comparison,
+ also included in the tests is Boost.Polygon's own partial-multiprecision
+ integer type which was custom written for this specific task:
+ </p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
@@ -41,7 +44,7 @@
</th>
<th>
<p>
- Relative (and Absolute) Times
+ Relative Performance (Actual time in parenthesis)
</p>
</th>
</tr></thead>
@@ -49,27 +52,152 @@
<tr>
<td>
<p>
+ polygon::detail::extended_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1(0.138831s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int256_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.19247(0.165551s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int512_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.23301(0.17118s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int1024_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.21463(0.168628s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ checked_int256_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31711(0.182855s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ checked_int512_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.57413(0.218538s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ checked_int1024_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.36992(0.190187s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.63244(0.226632s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
mpz_int
</p>
</td>
<td>
<p>
- 1.08279(0.370326s)
+ 5.42511(0.753172s)
</p>
</td>
</tr>
<tr>
<td>
<p>
- mpz_int (no Expression templates)
+ tom_int
</p>
</td>
<td>
<p>
- 1.1702(0.400222s)
+ 29.0793(4.03709s)
</p>
</td>
</tr>
+</tbody>
+</table></div>
+<p>
+ Note how for this use case, any dynamic allocation is a performance killer.
+ </p>
+<p>
+ The next tests
+ measure the time taken to generate 1000 128-bit random numbers and test for
+ primality using the Miller Rabin test. This is primarily a test of modular-exponentiation
+ since that is the rate limiting step:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Integer Type
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Performance (Actual time in parenthesis)
+ </p>
+ </th>
+</tr></thead>
+<tbody>
<tr>
<td>
<p>
@@ -78,7 +206,7 @@
</td>
<td>
<p>
- 1.3612(0.465547s)
+ 5.25827(0.379597s)
</p>
</td>
</tr>
@@ -90,19 +218,19 @@
</td>
<td>
<p>
- 1.33286(0.455854s)
+ 5.15675(0.372268s)
</p>
</td>
</tr>
<tr>
<td>
<p>
- cpp_int (64-bit cache)
+ cpp_int (128-bit cache)
</p>
</td>
<td>
<p>
- 1.33134(0.455333s)
+ 5.10882(0.368808s)
</p>
</td>
</tr>
@@ -114,7 +242,7 @@
</td>
<td>
<p>
- 1.29367(0.442451s)
+ 5.50623(0.397497s)
</p>
</td>
</tr>
@@ -126,7 +254,7 @@
</td>
<td>
<p>
- 1.08821(0.37218s)
+ 4.82257(0.348144s)
</p>
</td>
</tr>
@@ -138,7 +266,7 @@
</td>
<td>
<p>
- 1.07902(0.369037s)
+ 5.00053(0.360991s)
</p>
</td>
</tr>
@@ -150,19 +278,43 @@
</td>
<td>
<p>
- 1.02616(0.35096s)
+ 4.37589(0.315897s)
</p>
</td>
</tr>
<tr>
<td>
<p>
- int1024_t (no Expression templates)
+ checked_int1024_t
+ </p>
+ </td>
+<td>
+ <p>
+ 4.52396(0.326587s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpz_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1(0.0721905s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpz_int (no Expression templates)
</p>
</td>
<td>
<p>
- 1(0.342011s)
+ 1.0248(0.0739806s)
</p>
</td>
</tr>
@@ -174,7 +326,7 @@
</td>
<td>
<p>
- 3.74233(1.27992s)
+ 2.60673(0.188181s)
</p>
</td>
</tr>
@@ -186,7 +338,7 @@
</td>
<td>
<p>
- 3.97646(1.35999s)
+ 2.64997(0.191303s)
</p>
</td>
</tr>
@@ -198,7 +350,10 @@
in this case - so the time taken for multiplication and division tends to
dominate. Also note how increasing the internal cache size used by <code class="computeroutput"><span class="identifier">cpp_int</span></code> is quite effective in this case
in cutting out memory allocations altogether - cutting about a third off
- the total runtime.
+ the total runtime. Finally the much quicker times from GMP and tommath are
+ down to their much better modular-exponentiation algorithms (GMP's is about
+ 5x faster). That's an issue which needs to be addressed in a future release
+ for <a class="link" href="../tut/ints/cpp_int.html" title="cpp_int">cpp_int</a>.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -37,7 +37,7 @@
much better there.
</p>
<div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator__"></a><p class="title"><b>Table 1.19. Operator +</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator__"></a><p class="title"><b>Table 1.30. Operator +</b></p>
<div class="table-contents"><table class="table" summary="Operator +">
<colgroup>
<col>
@@ -82,22 +82,22 @@
</td>
<td>
<p>
- 1.24574 (0.0270133s)
+ 1.22306 (0.0279933s)
</p>
</td>
<td>
<p>
- 1.09665 (0.0352319s)
+ 1.15878 (0.038341s)
</p>
</td>
<td>
<p>
- 1.25708 (0.0524047s)
+ 1.24006 (0.0562258s)
</p>
</td>
<td>
<p>
- 1.31488 (0.08777s)
+ 1.32055 (0.0925091s)
</p>
</td>
</tr>
@@ -109,22 +109,22 @@
</td>
<td>
<p>
- 1.05787 (0.0229394s)
+ 1.56093 (0.0357264s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0321268s)
+ 1.71757 (0.05683s)
</p>
</td>
<td>
<p>
- 1.16171 (0.0484289s)
+ 1.66497 (0.0754916s)
</p>
</td>
<td>
<p>
- 1.24017 (0.0827832s)
+ 1.70376 (0.119354s)
</p>
</td>
</tr>
@@ -136,22 +136,22 @@
</td>
<td>
<p>
- 2.08016 (0.0451073s)
+ 1.98788 (0.0454986s)
</p>
</td>
<td>
<p>
- 1.33792 (0.042983s)
+ 1.37882 (0.0456216s)
</p>
</td>
<td>
<p>
- 1.19676 (0.0498904s)
+ 1.14898 (0.0520959s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0667514s)
+ <span class="bold"><strong>1</strong></span> (0.0700532s)
</p>
</td>
</tr>
@@ -163,22 +163,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0216845s)
+ <span class="bold"><strong>1</strong></span> (0.022888s)
</p>
</td>
<td>
<p>
- 1.07779 (0.0346258s)
+ <span class="bold"><strong>1</strong></span> (0.0330875s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0416877s)
+ <span class="bold"><strong>1</strong></span> (0.0453411s)
</p>
</td>
<td>
<p>
- 1.06344 (0.0709863s)
+ 1.07021 (0.074972s)
</p>
</td>
</tr>
@@ -186,7 +186,7 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator___int_"></a><p class="title"><b>Table 1.20. Operator +(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator___int_"></a><p class="title"><b>Table 1.31. Operator +(int)</b></p>
<div class="table-contents"><table class="table" summary="Operator +(int)">
<colgroup>
<col>
@@ -231,22 +231,22 @@
</td>
<td>
<p>
- 1.46244 (0.0202077s)
+ <span class="bold"><strong>1</strong></span> (0.0162581s)
</p>
</td>
<td>
<p>
- 1.20665 (0.0238576s)
+ <span class="bold"><strong>1</strong></span> (0.0196602s)
</p>
</td>
<td>
<p>
- 1.17647 (0.0258293s)
+ <span class="bold"><strong>1</strong></span> (0.0305476s)
</p>
</td>
<td>
<p>
- 1.12424 (0.0317931s)
+ <span class="bold"><strong>1</strong></span> (0.0421105s)
</p>
</td>
</tr>
@@ -258,22 +258,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0138178s)
+ 1.3852 (0.0225207s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0197719s)
+ 1.84835 (0.036339s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0219548s)
+ 1.6111 (0.0492153s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0282796s)
+ 1.63014 (0.068646s)
</p>
</td>
</tr>
@@ -285,22 +285,22 @@
</td>
<td>
<p>
- 2.15321 (0.0297527s)
+ 1.95525 (0.0317886s)
</p>
</td>
<td>
<p>
- 2.09834 (0.041488s)
+ 2.2217 (0.0436791s)
</p>
</td>
<td>
<p>
- 2.89935 (0.0636546s)
+ 2.21508 (0.0676653s)
</p>
</td>
<td>
<p>
- 3.70262 (0.104709s)
+ 2.58759 (0.108965s)
</p>
</td>
</tr>
@@ -312,22 +312,22 @@
</td>
<td>
<p>
- 17.1419 (0.236864s)
+ 13.603 (0.221158s)
</p>
</td>
<td>
<p>
- 12.9762 (0.256563s)
+ 11.5797 (0.227659s)
</p>
</td>
<td>
<p>
- 12.3275 (0.270648s)
+ 7.86674 (0.24031s)
</p>
</td>
<td>
<p>
- 10.7373 (0.303648s)
+ 6.36923 (0.268212s)
</p>
</td>
</tr>
@@ -335,7 +335,305 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator0"></a><p class="title"><b>Table 1.21. Operator -</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator___unsigned_long_long_"></a><p class="title"><b>Table 1.32. Operator +(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0269712s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0296213s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0380242s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.045841s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.38342 (0.0373126s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.51165 (0.0447769s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.54533 (0.05876s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3971 (0.0640443s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 26.7163 (0.72057s)
+ </p>
+ </td>
+<td>
+ <p>
+ 24.0631 (0.712781s)
+ </p>
+ </td>
+<td>
+ <p>
+ 19.6009 (0.745307s)
+ </p>
+ </td>
+<td>
+ <p>
+ 17.6547 (0.809308s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 19.7493 (0.532664s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.2944 (0.541905s)
+ </p>
+ </td>
+<td>
+ <p>
+ 14.9127 (0.567043s)
+ </p>
+ </td>
+<td>
+ <p>
+ 12.9059 (0.591619s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator____unsigned_long_long_"></a><p class="title"><b>Table 1.33. Operator +=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.16166 (0.020334s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.15312 (0.0204789s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.21086 (0.0216179s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.28088 (0.0229569s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0175043s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0177595s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0178534s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0179228s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 39.0852 (0.684159s)
+ </p>
+ </td>
+<td>
+ <p>
+ 38.7246 (0.68773s)
+ </p>
+ </td>
+<td>
+ <p>
+ 38.2555 (0.68299s)
+ </p>
+ </td>
+<td>
+ <p>
+ 37.6736 (0.675217s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 30.5872 (0.535408s)
+ </p>
+ </td>
+<td>
+ <p>
+ 29.371 (0.521614s)
+ </p>
+ </td>
+<td>
+ <p>
+ 30.3387 (0.541648s)
+ </p>
+ </td>
+<td>
+ <p>
+ 31.8346 (0.570565s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator0"></a><p class="title"><b>Table 1.34. Operator -</b></p>
<div class="table-contents"><table class="table" summary="Operator -">
<colgroup>
<col>
@@ -380,22 +678,1214 @@
</td>
<td>
<p>
- 1.15385 (0.029665s)
+ 1.12975 (0.0308979s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0392305s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05392 (0.0543957s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.18166 (0.0860767s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.36853 (0.0374283s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.45987 (0.0572717s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.44606 (0.0746349s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.55935 (0.11359s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.53173 (0.0418917s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.17956 (0.0462749s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.13609 (0.0586365s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0728442s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0273493s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.07293 (0.0420917s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0516126s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0985 (0.0800191s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator_int0"></a><p class="title"><b>Table 1.35. Operator -(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0146171s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0172176s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.023655s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0313105s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.49086 (0.021792s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.94917 (0.03356s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.89657 (0.0448632s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.82658 (0.057191s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.16301 (0.0316169s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.55059 (0.0439151s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.67983 (0.0633913s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.27949 (0.102682s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 14.0691 (0.20565s)
+ </p>
+ </td>
+<td>
+ <p>
+ 12.527 (0.215684s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.43355 (0.22315s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.64671 (0.239422s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table 1.36. Operator -(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0265242s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0295275s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0377737s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0450106s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2627 (0.033492s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.47472 (0.0435449s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.47468 (0.055704s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.40667 (0.0633151s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 26.0595 (0.691208s)
+ </p>
+ </td>
+<td>
+ <p>
+ 23.3957 (0.690817s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.9344 (0.715223s)
+ </p>
+ </td>
+<td>
+ <p>
+ 16.9593 (0.763349s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 19.26 (0.510855s)
+ </p>
+ </td>
+<td>
+ <p>
+ 17.6236 (0.52038s)
+ </p>
+ </td>
+<td>
+ <p>
+ 13.9134 (0.52556s)
+ </p>
+ </td>
+<td>
+ <p>
+ 12.2359 (0.550746s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table 1.37. Operator -=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.28589 (0.0210146s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3505 (0.0222463s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.34427 (0.0237863s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.22787 (0.0230902s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0163425s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0164727s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0176946s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0188051s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 41.0201 (0.670371s)
+ </p>
+ </td>
+<td>
+ <p>
+ 41.4726 (0.683165s)
+ </p>
+ </td>
+<td>
+ <p>
+ 37.9503 (0.671514s)
+ </p>
+ </td>
+<td>
+ <p>
+ 35.6021 (0.669502s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 32.6952 (0.534322s)
+ </p>
+ </td>
+<td>
+ <p>
+ 31.4882 (0.518695s)
+ </p>
+ </td>
+<td>
+ <p>
+ 29.3988 (0.5202s)
+ </p>
+ </td>
+<td>
+ <p>
+ 29.1175 (0.547558s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator1"></a><p class="title"><b>Table 1.38. Operator *</b></p>
+<div class="table-contents"><table class="table" summary="Operator *">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.13172 (0.0766099s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.59509 (0.20993s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.40998 (0.70643s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.70758 (2.66895s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.067693s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.27132 (0.167319s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.50102s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.563s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.01718 (0.0688559s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.13161s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.13221 (0.567258s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.02292 (1.59883s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.6793 (0.113677s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.66959 (0.351345s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.01091 (1.00751s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.05812 (3.21684s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator_int1"></a><p class="title"><b>Table 1.39. Operator *(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0228822s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.19988 (0.0332404s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.13882 (0.0416226s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2711 (0.0665655s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.33157 (0.0304692s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.6546 (0.0458376s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.72684 (0.063114s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.83178 (0.0959269s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.00858 (0.0230786s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0277032s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0365488s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0523682s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 10.8491 (0.248252s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.88511 (0.273849s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.95509 (0.327298s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.04172 (0.421131s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table 1.40. Operator *(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0574926s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0876613s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.146194s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.258556s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.12247 (0.0645337s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24471 (0.109113s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.19748 (0.175065s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.17442 (0.303653s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 12.271 (0.705488s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.23054 (0.7215s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.28668 (0.772883s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.09816 (0.801047s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 10.2751 (0.590743s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.36707 (0.645807s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.88979 (0.71486s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.43724 (0.888719s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table 1.41. Operator *=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 114.922 (7.57662s)
+ </p>
+ </td>
+<td>
+ <p>
+ 70.5882 (7.61458s)
+ </p>
+ </td>
+<td>
+ <p>
+ 44.3157 (7.67791s)
+ </p>
+ </td>
+<td>
+ <p>
+ 26.2881 (7.81595s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0659286s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.107873s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.173255s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.297319s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 47.9828 (3.16344s)
+ </p>
+ </td>
+<td>
+ <p>
+ 29.4972 (3.18196s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.1719 (3.14838s)
+ </p>
+ </td>
+<td>
+ <p>
+ 10.6941 (3.17956s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 284.199 (18.7368s)
+ </p>
+ </td>
+<td>
+ <p>
+ 173.129 (18.676s)
+ </p>
+ </td>
+<td>
+ <p>
+ 109.052 (18.8938s)
+ </p>
+ </td>
+<td>
+ <p>
+ 64.5866 (19.2028s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator2"></a><p class="title"><b>Table 1.42. Operator /</b></p>
+<div class="table-contents"><table class="table" summary="Operator /">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.71618 (0.616086s)
</p>
</td>
<td>
<p>
- 1.08217 (0.0369886s)
+ 2.09988 (0.737246s)
</p>
</td>
<td>
<p>
- 1.05882 (0.051534s)
+ 1.65898 (0.94343s)
</p>
</td>
<td>
<p>
- 1.12132 (0.0822725s)
+ 1.49441 (1.44418s)
</p>
</td>
</tr>
@@ -407,22 +1897,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0257095s)
+ <span class="bold"><strong>1</strong></span> (0.226821s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0341801s)
+ <span class="bold"><strong>1</strong></span> (0.35109s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0486711s)
+ <span class="bold"><strong>1</strong></span> (0.56868s)
</p>
</td>
<td>
<p>
- 1.08659 (0.0797242s)
+ <span class="bold"><strong>1</strong></span> (0.966385s)
</p>
</td>
</tr>
@@ -434,22 +1924,22 @@
</td>
<td>
<p>
- 1.56685 (0.040283s)
+ 3.82134 (0.866761s)
</p>
</td>
<td>
<p>
- 1.32917 (0.0454312s)
+ 2.75998 (0.969001s)
</p>
</td>
<td>
<p>
- 1.06917 (0.0520378s)
+ 1.93226 (1.09884s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0733708s)
+ 1.34132 (1.29623s)
</p>
</td>
</tr>
@@ -461,22 +1951,22 @@
</td>
<td>
<p>
- 1.059 (0.0272264s)
+ 13.2978 (3.01622s)
</p>
</td>
<td>
<p>
- 1.16974 (0.0399818s)
+ 11.3314 (3.97833s)
</p>
</td>
<td>
<p>
- 1.01303 (0.0493054s)
+ 9.94138 (5.65347s)
</p>
</td>
<td>
<p>
- 1.03375 (0.0758472s)
+ 13.3423 (12.8938s)
</p>
</td>
</tr>
@@ -484,8 +1974,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int0"></a><p class="title"><b>Table 1.22. Operator -(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator -(int)">
+<a name="boost_multiprecision.perf.integer_performance.operator_int2"></a><p class="title"><b>Table 1.43. Operator /(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(int)">
<colgroup>
<col>
<col>
@@ -529,22 +2019,22 @@
</td>
<td>
<p>
- 1.51665 (0.0157196s)
+ 4.15094 (0.23911s)
</p>
</td>
<td>
<p>
- 1.31513 (0.0200533s)
+ 3.57962 (0.356615s)
</p>
</td>
<td>
<p>
- 1.29599 (0.0235066s)
+ 3.11624 (0.578256s)
</p>
</td>
<td>
<p>
- 1.21534 (0.0266136s)
+ 2.82967 (1.00414s)
</p>
</td>
</tr>
@@ -556,22 +2046,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0103647s)
+ 2.42806 (0.139865s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0152482s)
+ 2.54164 (0.253208s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.018138s)
+ 2.43025 (0.450962s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.021898s)
+ 2.37209 (0.841768s)
</p>
</td>
</tr>
@@ -583,22 +2073,22 @@
</td>
<td>
<p>
- 2.7938 (0.0289568s)
+ <span class="bold"><strong>1</strong></span> (0.0576038s)
</p>
</td>
<td>
<p>
- 2.55493 (0.038958s)
+ <span class="bold"><strong>1</strong></span> (0.0996238s)
</p>
</td>
<td>
<p>
- 3.12248 (0.0566356s)
+ <span class="bold"><strong>1</strong></span> (0.185562s)
</p>
</td>
<td>
<p>
- 4.48855 (0.0982904s)
+ <span class="bold"><strong>1</strong></span> (0.354863s)
</p>
</td>
</tr>
@@ -610,22 +2100,22 @@
</td>
<td>
<p>
- 20.8695 (0.216305s)
+ 36.3133 (2.09179s)
</p>
</td>
<td>
<p>
- 15.0705 (0.229797s)
+ 28.2731 (2.81668s)
</p>
</td>
<td>
<p>
- 13.4093 (0.243217s)
+ 21.8589 (4.05618s)
</p>
</td>
<td>
<p>
- 12.2599 (0.268468s)
+ 25.8061 (9.15762s)
</p>
</td>
</tr>
@@ -633,8 +2123,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator1"></a><p class="title"><b>Table 1.23. Operator *</b></p>
-<div class="table-contents"><table class="table" summary="Operator *">
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table 1.44. Operator /(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
<colgroup>
<col>
<col>
@@ -678,22 +2168,22 @@
</td>
<td>
<p>
- 1.29504 (0.0731032s)
+ 1.53953 (0.716927s)
</p>
</td>
<td>
<p>
- 1.55431 (0.196132s)
+ 1.40156 (1.65075s)
</p>
</td>
<td>
<p>
- 1.4363 (0.656569s)
+ 2.59584 (3.57744s)
</p>
</td>
<td>
<p>
- 1.63701 (2.47859s)
+ 4.58524 (8.3789s)
</p>
</td>
</tr>
@@ -705,22 +2195,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0564485s)
+ <span class="bold"><strong>1</strong></span> (0.465679s)
</p>
</td>
<td>
<p>
- 1.16604 (0.147138s)
+ 1.09556 (1.29034s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.457124s)
+ 2.2858 (3.15016s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.5141s)
+ 4.40115 (8.0425s)
</p>
</td>
</tr>
@@ -732,22 +2222,22 @@
</td>
<td>
<p>
- 1.19574 (0.0674975s)
+ 2.25405 (1.04967s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.126186s)
+ <span class="bold"><strong>1</strong></span> (1.17779s)
</p>
</td>
<td>
<p>
- 1.16627 (0.53313s)
+ <span class="bold"><strong>1</strong></span> (1.37814s)
</p>
</td>
<td>
<p>
- 1.02906 (1.5581s)
+ <span class="bold"><strong>1</strong></span> (1.82736s)
</p>
</td>
</tr>
@@ -759,22 +2249,22 @@
</td>
<td>
<p>
- 1.97229 (0.111333s)
+ 5.03884 (2.34648s)
</p>
</td>
<td>
<p>
- 2.67087 (0.337027s)
+ 2.63459 (3.103s)
</p>
</td>
<td>
<p>
- 2.13031 (0.973817s)
+ 3.67287 (5.06174s)
</p>
</td>
<td>
<p>
- 2.05869 (3.11706s)
+ 6.77479 (12.38s)
</p>
</td>
</tr>
@@ -782,8 +2272,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int1"></a><p class="title"><b>Table 1.24. Operator *(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator *(int)">
+<a name="boost_multiprecision.perf.integer_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table 1.45. Operator /=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)">
<colgroup>
<col>
<col>
@@ -827,22 +2317,22 @@
</td>
<td>
<p>
- 1.34609 (0.030315s)
+ 1.78744 (0.0586752s)
</p>
</td>
<td>
<p>
- 1.57086 (0.0407838s)
+ 1.74065 (0.0616578s)
</p>
</td>
<td>
<p>
- 1.60154 (0.0542267s)
+ 1.66814 (0.0740436s)
</p>
</td>
<td>
<p>
- 1.67808 (0.0804984s)
+ 1.36231 (0.126362s)
</p>
</td>
</tr>
@@ -854,22 +2344,22 @@
</td>
<td>
<p>
- 1.29783 (0.0292279s)
+ <span class="bold"><strong>1</strong></span> (0.0328264s)
</p>
</td>
<td>
<p>
- 1.58263 (0.0410894s)
+ <span class="bold"><strong>1</strong></span> (0.0354222s)
</p>
</td>
<td>
<p>
- 1.61543 (0.054697s)
+ <span class="bold"><strong>1</strong></span> (0.0443871s)
</p>
</td>
<td>
<p>
- 1.66841 (0.0800346s)
+ <span class="bold"><strong>1</strong></span> (0.0927553s)
</p>
</td>
</tr>
@@ -881,22 +2371,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0225207s)
+ 21.2392 (0.697207s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0259628s)
+ 19.3517 (0.68548s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.033859s)
+ 15.2936 (0.678837s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0479706s)
+ 7.37138 (0.683734s)
</p>
</td>
</tr>
@@ -908,22 +2398,22 @@
</td>
<td>
<p>
- 12.4278 (0.279882s)
+ 32.8142 (1.07717s)
</p>
</td>
<td>
<p>
- 11.9045 (0.309074s)
+ 30.5556 (1.08235s)
</p>
</td>
<td>
<p>
- 10.5973 (0.358813s)
+ 24.7236 (1.09741s)
</p>
</td>
<td>
<p>
- 9.47384 (0.454466s)
+ 12.4072 (1.15084s)
</p>
</td>
</tr>
@@ -931,8 +2421,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator2"></a><p class="title"><b>Table 1.25. Operator /</b></p>
-<div class="table-contents"><table class="table" summary="Operator /">
+<a name="boost_multiprecision.perf.integer_performance.operator3"></a><p class="title"><b>Table 1.46. Operator %</b></p>
+<div class="table-contents"><table class="table" summary="Operator %">
<colgroup>
<col>
<col>
@@ -976,22 +2466,22 @@
</td>
<td>
<p>
- 2.86387 (0.593314s)
+ 1.86833 (0.37472s)
</p>
</td>
<td>
<p>
- 2.18375 (0.69965s)
+ 1.43076 (0.491332s)
</p>
</td>
<td>
<p>
- 1.72571 (0.918294s)
+ 1.30757 (0.708055s)
</p>
</td>
<td>
<p>
- 1.39251 (1.33801s)
+ 1.2528 (1.15842s)
</p>
</td>
</tr>
@@ -1003,22 +2493,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.207172s)
+ <span class="bold"><strong>1</strong></span> (0.200565s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.320389s)
+ <span class="bold"><strong>1</strong></span> (0.343407s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.532127s)
+ <span class="bold"><strong>1</strong></span> (0.541503s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.960856s)
+ <span class="bold"><strong>1</strong></span> (0.924662s)
</p>
</td>
</tr>
@@ -1030,22 +2520,22 @@
</td>
<td>
<p>
- 3.89115 (0.806137s)
+ 3.22603 (0.647027s)
</p>
</td>
<td>
<p>
- 2.87573 (0.921352s)
+ 2.08249 (0.715143s)
</p>
</td>
<td>
<p>
- 1.96635 (1.04635s)
+ 1.5148 (0.82027s)
</p>
</td>
<td>
<p>
- 1.29618 (1.24544s)
+ 1.09519 (1.01268s)
</p>
</td>
</tr>
@@ -1057,22 +2547,22 @@
</td>
<td>
<p>
- 11.9483 (2.47535s)
+ 15.4642 (3.10158s)
</p>
</td>
<td>
<p>
- 9.35941 (2.99865s)
+ 11.5534 (3.9675s)
</p>
</td>
<td>
<p>
- 8.79014 (4.67747s)
+ 10.5164 (5.69467s)
</p>
</td>
<td>
<p>
- 11.8316 (11.3684s)
+ 13.8962 (12.8493s)
</p>
</td>
</tr>
@@ -1080,8 +2570,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int2"></a><p class="title"><b>Table 1.26. Operator /(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator /(int)">
+<a name="boost_multiprecision.perf.integer_performance.operator_int3"></a><p class="title"><b>Table 1.47. Operator %(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator %(int)">
<colgroup>
<col>
<col>
@@ -1125,22 +2615,22 @@
</td>
<td>
<p>
- 5.77003 (0.313196s)
+ 1.80079 (0.106617s)
</p>
</td>
<td>
<p>
- 4.38067 (0.431864s)
+ 1.96413 (0.207216s)
</p>
</td>
<td>
<p>
- 3.55054 (0.634559s)
+ 2.09096 (0.395682s)
</p>
</td>
<td>
<p>
- 2.97898 (1.03205s)
+ 2.14767 (0.776873s)
</p>
</td>
</tr>
@@ -1152,22 +2642,22 @@
</td>
<td>
<p>
- 2.48952 (0.135131s)
+ 1.73532 (0.10274s)
</p>
</td>
<td>
<p>
- 2.59188 (0.255519s)
+ 1.92036 (0.202599s)
</p>
</td>
<td>
<p>
- 2.56716 (0.458808s)
+ 2.02172 (0.382579s)
</p>
</td>
<td>
<p>
- 2.52368 (0.874313s)
+ 2.07328 (0.749963s)
</p>
</td>
</tr>
@@ -1179,22 +2669,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0542797s)
+ <span class="bold"><strong>1</strong></span> (0.0592053s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0985842s)
+ <span class="bold"><strong>1</strong></span> (0.1055s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.178722s)
+ <span class="bold"><strong>1</strong></span> (0.189234s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.346443s)
+ <span class="bold"><strong>1</strong></span> (0.361727s)
</p>
</td>
</tr>
@@ -1206,22 +2696,22 @@
</td>
<td>
<p>
- 31.6477 (1.71783s)
+ 35.6993 (2.11359s)
</p>
</td>
<td>
<p>
- 22.8727 (2.25489s)
+ 25.3086 (2.67007s)
</p>
</td>
<td>
<p>
- 19.9248 (3.56101s)
+ 21.2701 (4.02504s)
</p>
</td>
<td>
<p>
- 24.3266 (8.42779s)
+ 25.8662 (9.3565s)
</p>
</td>
</tr>
@@ -1229,8 +2719,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator3"></a><p class="title"><b>Table 1.27. Operator %</b></p>
-<div class="table-contents"><table class="table" summary="Operator %">
+<a name="boost_multiprecision.perf.integer_performance.operator_construct"></a><p class="title"><b>Table 1.48. Operator construct</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct">
<colgroup>
<col>
<col>
@@ -1274,22 +2764,22 @@
</td>
<td>
<p>
- 1.9813 (0.357541s)
+ 1.17135 (0.00274853s)
</p>
</td>
<td>
<p>
- 1.55667 (0.460146s)
+ <span class="bold"><strong>1</strong></span> (0.00275161s)
</p>
</td>
<td>
<p>
- 1.35341 (0.681144s)
+ <span class="bold"><strong>1</strong></span> (0.00275161s)
</p>
</td>
<td>
<p>
- 1.19906 (1.10138s)
+ <span class="bold"><strong>1</strong></span> (0.00344359s)
</p>
</td>
</tr>
@@ -1301,22 +2791,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.180457s)
+ <span class="bold"><strong>1</strong></span> (0.00234646s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.295597s)
+ 1.54518 (0.00425173s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.503278s)
+ 2.2494 (0.00618947s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.918538s)
+ 1.73247 (0.00596591s)
</p>
</td>
</tr>
@@ -1328,22 +2818,22 @@
</td>
<td>
<p>
- 3.50213 (0.631985s)
+ 85.6802 (0.201045s)
</p>
</td>
<td>
<p>
- 2.33312 (0.689662s)
+ 72.6635 (0.199941s)
</p>
</td>
<td>
<p>
- 1.57264 (0.791475s)
+ 78.1286 (0.214979s)
</p>
</td>
<td>
<p>
- 1.07795 (0.99014s)
+ 58.3553 (0.200952s)
</p>
</td>
</tr>
@@ -1355,22 +2845,22 @@
</td>
<td>
<p>
- 12.2393 (2.20868s)
+ 87.9831 (0.206449s)
</p>
</td>
<td>
<p>
- 10.1123 (2.98915s)
+ 74.8522 (0.205964s)
</p>
</td>
<td>
<p>
- 9.46676 (4.76442s)
+ 74.8918 (0.206073s)
</p>
</td>
<td>
<p>
- 12.1795 (11.1873s)
+ 63.4572 (0.218521s)
</p>
</td>
</tr>
@@ -1378,8 +2868,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int3"></a><p class="title"><b>Table 1.28. Operator %(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator %(int)">
+<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned_"></a><p class="title"><b>Table 1.49. Operator construct(unsigned)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
<colgroup>
<col>
<col>
@@ -1423,22 +2913,22 @@
</td>
<td>
<p>
- 1.88485 (0.105552s)
+ 1.43934 (0.00268554s)
</p>
</td>
<td>
<p>
- 2.00194 (0.203711s)
+ <span class="bold"><strong>1</strong></span> (0.00286887s)
</p>
</td>
<td>
<p>
- 2.08202 (0.380096s)
+ <span class="bold"><strong>1</strong></span> (0.00283465s)
</p>
</td>
<td>
<p>
- 2.12794 (0.752068s)
+ <span class="bold"><strong>1</strong></span> (0.00290638s)
</p>
</td>
</tr>
@@ -1450,22 +2940,22 @@
</td>
<td>
<p>
- 1.7474 (0.0978544s)
+ <span class="bold"><strong>1</strong></span> (0.00186581s)
</p>
</td>
<td>
<p>
- 1.88457 (0.191768s)
+ 1.7597 (0.00504834s)
</p>
</td>
<td>
<p>
- 2.0306 (0.37071s)
+ 2.07419 (0.00587959s)
</p>
</td>
<td>
<p>
- 2.0851 (0.736929s)
+ 1.89871 (0.00551837s)
</p>
</td>
</tr>
@@ -1477,22 +2967,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0560001s)
+ 125.861 (0.234832s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.101757s)
+ 72.7068 (0.208586s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.182561s)
+ 75.5147 (0.214058s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.353426s)
+ 71.2679 (0.207131s)
</p>
</td>
</tr>
@@ -1504,22 +2994,22 @@
</td>
<td>
<p>
- 30.4466 (1.70501s)
+ 240.568 (0.448854s)
</p>
</td>
<td>
<p>
- 22.2997 (2.26915s)
+ 155.552 (0.446257s)
</p>
</td>
<td>
<p>
- 19.6199 (3.58184s)
+ 157.598 (0.446734s)
</p>
</td>
<td>
<p>
- 24.0694 (8.50676s)
+ 160.728 (0.467137s)
</p>
</td>
</tr>
@@ -1527,8 +3017,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator___"></a><p class="title"><b>Table 1.29. Operator <<</b></p>
-<div class="table-contents"><table class="table" summary="Operator <<">
+<a name="boost_multiprecision.perf.integer_performance.operator_construct_unsigned_long_long_"></a><p class="title"><b>Table 1.50. Operator construct(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)">
<colgroup>
<col>
<col>
@@ -1572,22 +3062,22 @@
</td>
<td>
<p>
- 1.20362 (0.0224696s)
+ 2.3528 (0.00771495s)
</p>
</td>
<td>
<p>
- 1.08555 (0.0294403s)
+ 1.61678 (0.00717424s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0360516s)
+ 1.12087 (0.00715985s)
</p>
</td>
<td>
<p>
- 1.07177 (0.0523935s)
+ 1.2104 (0.0078878s)
</p>
</td>
</tr>
@@ -1599,22 +3089,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0186683s)
+ <span class="bold"><strong>1</strong></span> (0.00327905s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0271201s)
+ <span class="bold"><strong>1</strong></span> (0.00443737s)
</p>
</td>
<td>
<p>
- 1.02126 (0.036818s)
+ <span class="bold"><strong>1</strong></span> (0.00638775s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0488848s)
+ <span class="bold"><strong>1</strong></span> (0.00651668s)
</p>
</td>
</tr>
@@ -1626,22 +3116,22 @@
</td>
<td>
<p>
- 1.36706 (0.0255207s)
+ 222.775 (0.730489s)
</p>
</td>
<td>
<p>
- 1.12042 (0.0303858s)
+ 165.447 (0.734148s)
</p>
</td>
<td>
<p>
- 1.24359 (0.0448335s)
+ 114.708 (0.732725s)
</p>
</td>
<td>
<p>
- 1.40143 (0.0685085s)
+ 112.162 (0.730926s)
</p>
</td>
</tr>
@@ -1653,22 +3143,22 @@
</td>
<td>
<p>
- 2.09357 (0.0390833s)
+ 215.962 (0.70815s)
</p>
</td>
<td>
<p>
- 2.4569 (0.0666312s)
+ 157.945 (0.700858s)
</p>
</td>
<td>
<p>
- 2.63592 (0.0950291s)
+ 109.582 (0.699985s)
</p>
</td>
<td>
<p>
- 3.43638 (0.167987s)
+ 111.909 (0.729275s)
</p>
</td>
</tr>
@@ -1676,8 +3166,157 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator4"></a><p class="title"><b>Table 1.30. Operator >></b></p>
-<div class="table-contents"><table class="table" summary="Operator >>">
+<a name="boost_multiprecision.perf.integer_performance.operator_str"></a><p class="title"><b>Table 1.51. Operator str</b></p>
+<div class="table-contents"><table class="table" summary="Operator str">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.46938 (0.00196575s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.37205 (0.00331355s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.5689 (0.00862952s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.57176 (0.0237239s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00133781s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00241504s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00550035s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.20619 (0.0182059s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.65482 (0.00221383s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.38972 (0.00335622s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.13845 (0.0062619s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0150938s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 13.9845 (0.0187087s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.3179 (0.0442384s)
+ </p>
+ </td>
+<td>
+ <p>
+ 23.3489 (0.128427s)
+ </p>
+ </td>
+<td>
+ <p>
+ 25.3273 (0.382285s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.integer_performance.operator_gcd"></a><p class="title"><b>Table 1.52. Operator gcd</b></p>
+<div class="table-contents"><table class="table" summary="Operator gcd">
<colgroup>
<col>
<col>
@@ -1721,22 +3360,22 @@
</td>
<td>
<p>
- 1.33649 (0.0210319s)
+ 2.03241 (5.06795s)
</p>
</td>
<td>
<p>
- 1.12919 (0.0266135s)
+ 1.89904 (11.3002s)
</p>
</td>
<td>
<p>
- 1.10413 (0.0307184s)
+ 1.99735 (27.4027s)
</p>
</td>
<td>
<p>
- 1.09267 (0.0399373s)
+ 2.20708 (73.7574s)
</p>
</td>
</tr>
@@ -1748,22 +3387,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0157367s)
+ 1.67874 (4.18605s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0235686s)
+ 1.70044 (10.1184s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0278214s)
+ 1.96475 (26.9554s)
</p>
</td>
<td>
<p>
- 1.05198 (0.0384501s)
+ 2.28347 (76.31s)
</p>
</td>
</tr>
@@ -1775,22 +3414,22 @@
</td>
<td>
<p>
- 1.72135 (0.0270884s)
+ <span class="bold"><strong>1</strong></span> (2.49357s)
</p>
</td>
<td>
<p>
- 1.2078 (0.0284661s)
+ <span class="bold"><strong>1</strong></span> (5.95047s)
</p>
</td>
<td>
<p>
- 1.16066 (0.0322912s)
+ <span class="bold"><strong>1</strong></span> (13.7195s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0365503s)
+ <span class="bold"><strong>1</strong></span> (33.4185s)
</p>
</td>
</tr>
@@ -1802,22 +3441,22 @@
</td>
<td>
<p>
- 15.4381 (0.242945s)
+ 5.01832 (12.5135s)
</p>
</td>
<td>
<p>
- 11.8797 (0.279987s)
+ 4.41659 (26.2808s)
</p>
</td>
<td>
<p>
- 10.9043 (0.303374s)
+ 4.08042 (55.9814s)
</p>
</td>
<td>
<p>
- 14.0762 (0.514491s)
+ 3.97901 (132.972s)
</p>
</td>
</tr>
@@ -1825,7 +3464,7 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator5"></a><p class="title"><b>Table 1.31. Operator &</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator4"></a><p class="title"><b>Table 1.53. Operator &</b></p>
<div class="table-contents"><table class="table" summary="Operator &">
<colgroup>
<col>
@@ -1870,22 +3509,22 @@
</td>
<td>
<p>
- 1.65829 (0.0314059s)
+ 1.00344 (0.0315529s)
</p>
</td>
<td>
<p>
- 1.42198 (0.0390384s)
+ <span class="bold"><strong>1</strong></span> (0.0426295s)
</p>
</td>
<td>
<p>
- 1.48578 (0.0498903s)
+ <span class="bold"><strong>1</strong></span> (0.0543214s)
</p>
</td>
<td>
<p>
- 1.51243 (0.0770342s)
+ 1.06624 (0.0835064s)
</p>
</td>
</tr>
@@ -1897,22 +3536,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0189387s)
+ <span class="bold"><strong>1</strong></span> (0.0314446s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0274536s)
+ 1.0808 (0.046074s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0335786s)
+ 1.06116 (0.0576436s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0509341s)
+ <span class="bold"><strong>1</strong></span> (0.0783186s)
</p>
</td>
</tr>
@@ -1924,22 +3563,22 @@
</td>
<td>
<p>
- 2.80248 (0.0530755s)
+ 1.78372 (0.0560885s)
</p>
</td>
<td>
<p>
- 2.39752 (0.0658206s)
+ 1.58661 (0.0676363s)
</p>
</td>
<td>
<p>
- 2.66009 (0.089322s)
+ 1.5738 (0.0854908s)
</p>
</td>
<td>
<p>
- 2.73942 (0.13953s)
+ 1.83409 (0.143644s)
</p>
</td>
</tr>
@@ -1951,22 +3590,22 @@
</td>
<td>
<p>
- 6.95432 (0.131706s)
+ 4.08054 (0.128311s)
</p>
</td>
<td>
<p>
- 5.4059 (0.148412s)
+ 3.50852 (0.149567s)
</p>
</td>
<td>
<p>
- 4.56887 (0.153417s)
+ 2.88826 (0.156894s)
</p>
</td>
<td>
<p>
- 6.5696 (0.334616s)
+ 4.45879 (0.349206s)
</p>
</td>
</tr>
@@ -1974,7 +3613,7 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int4"></a><p class="title"><b>Table 1.32. Operator &(int)</b></p>
+<a name="boost_multiprecision.perf.integer_performance.operator_int4"></a><p class="title"><b>Table 1.54. Operator &(int)</b></p>
<div class="table-contents"><table class="table" summary="Operator &(int)">
<colgroup>
<col>
@@ -2019,22 +3658,22 @@
</td>
<td>
<p>
- 1.63285 (0.0472296s)
+ <span class="bold"><strong>1</strong></span> (0.0367605s)
</p>
</td>
<td>
<p>
- 1.43344 (0.0588492s)
+ <span class="bold"><strong>1</strong></span> (0.0485394s)
</p>
</td>
<td>
<p>
- 1.33141 (0.0724386s)
+ <span class="bold"><strong>1</strong></span> (0.0650023s)
</p>
</td>
<td>
<p>
- 1.21353 (0.104144s)
+ <span class="bold"><strong>1</strong></span> (0.099751s)
</p>
</td>
</tr>
@@ -2046,22 +3685,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0289247s)
+ 1.00324 (0.0368795s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0410546s)
+ 1.06734 (0.0518081s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0544075s)
+ 1.05192 (0.0683771s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0858187s)
+ 1.05296 (0.105034s)
</p>
</td>
</tr>
@@ -2073,22 +3712,22 @@
</td>
<td>
<p>
- 5.24478 (0.151704s)
+ 4.00058 (0.147063s)
</p>
</td>
<td>
<p>
- 3.81907 (0.15679s)
+ 3.02928 (0.147039s)
</p>
</td>
<td>
<p>
- 2.77979 (0.151242s)
+ 2.22221 (0.144449s)
</p>
</td>
<td>
<p>
- 1.84209 (0.158086s)
+ 1.45749 (0.145386s)
</p>
</td>
</tr>
@@ -2100,22 +3739,22 @@
</td>
<td>
<p>
- 11.7257 (0.339163s)
+ 8.83732 (0.324864s)
</p>
</td>
<td>
<p>
- 8.6379 (0.354625s)
+ 6.95191 (0.337442s)
</p>
</td>
<td>
<p>
- 6.90411 (0.375636s)
+ 5.42556 (0.352674s)
</p>
</td>
<td>
<p>
- 7.63253 (0.655013s)
+ 6.10829 (0.609309s)
</p>
</td>
</tr>
@@ -2123,8 +3762,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator6"></a><p class="title"><b>Table 1.33. Operator ^</b></p>
-<div class="table-contents"><table class="table" summary="Operator ^">
+<a name="boost_multiprecision.perf.integer_performance.operator5"></a><p class="title"><b>Table 1.55. Operator |</b></p>
+<div class="table-contents"><table class="table" summary="Operator |">
<colgroup>
<col>
<col>
@@ -2168,22 +3807,22 @@
</td>
<td>
<p>
- 1.39325 (0.0297525s)
+ <span class="bold"><strong>1</strong></span> (0.0312723s)
</p>
</td>
<td>
<p>
- 1.28821 (0.0385005s)
+ <span class="bold"><strong>1</strong></span> (0.0428385s)
</p>
</td>
<td>
<p>
- 1.18843 (0.0492426s)
+ <span class="bold"><strong>1</strong></span> (0.0528083s)
</p>
</td>
<td>
<p>
- 1.07724 (0.0758668s)
+ <span class="bold"><strong>1</strong></span> (0.0827344s)
</p>
</td>
</tr>
@@ -2195,22 +3834,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0213547s)
+ 1.0311 (0.0322449s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0298868s)
+ 1.20267 (0.0515207s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.041435s)
+ 1.27028 (0.0670814s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.070427s)
+ 1.19432 (0.0988112s)
</p>
</td>
</tr>
@@ -2222,22 +3861,22 @@
</td>
<td>
<p>
- 2.28582 (0.048813s)
+ 1.55273 (0.0485576s)
</p>
</td>
<td>
<p>
- 2.03478 (0.0608129s)
+ 1.4656 (0.0627839s)
</p>
</td>
<td>
<p>
- 2.05655 (0.0852131s)
+ 1.66721 (0.0880424s)
</p>
</td>
<td>
<p>
- 1.92381 (0.135488s)
+ 1.67004 (0.13817s)
</p>
</td>
</tr>
@@ -2249,22 +3888,22 @@
</td>
<td>
<p>
- 6.17078 (0.131775s)
+ 4.15311 (0.129877s)
</p>
</td>
<td>
<p>
- 4.8567 (0.145151s)
+ 3.39008 (0.145226s)
</p>
</td>
<td>
<p>
- 3.64659 (0.151097s)
+ 2.88739 (0.152478s)
</p>
</td>
<td>
<p>
- 4.78192 (0.336776s)
+ 4.20575 (0.34796s)
</p>
</td>
</tr>
@@ -2272,8 +3911,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int5"></a><p class="title"><b>Table 1.34. Operator ^(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator ^(int)">
+<a name="boost_multiprecision.perf.integer_performance.operator_int5"></a><p class="title"><b>Table 1.56. Operator |(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator |(int)">
<colgroup>
<col>
<col>
@@ -2317,22 +3956,22 @@
</td>
<td>
<p>
- 1.89396 (0.0383127s)
+ 1.01685 (0.030066s)
</p>
</td>
<td>
<p>
- 1.64269 (0.043417s)
+ <span class="bold"><strong>1</strong></span> (0.0360965s)
</p>
</td>
<td>
<p>
- 1.5386 (0.0477162s)
+ <span class="bold"><strong>1</strong></span> (0.0402109s)
</p>
</td>
<td>
<p>
- 1.32247 (0.0568053s)
+ <span class="bold"><strong>1</strong></span> (0.0527074s)
</p>
</td>
</tr>
@@ -2344,22 +3983,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0202288s)
+ <span class="bold"><strong>1</strong></span> (0.0295677s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0264305s)
+ 1.50234 (0.0542292s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0310128s)
+ 1.52609 (0.0613656s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0429539s)
+ 1.37526 (0.0724863s)
</p>
</td>
</tr>
@@ -2371,22 +4010,22 @@
</td>
<td>
<p>
- 7.01953 (0.141997s)
+ 4.84414 (0.14323s)
</p>
</td>
<td>
<p>
- 5.47513 (0.14471s)
+ 3.99297 (0.144132s)
</p>
</td>
<td>
<p>
- 4.6627 (0.144603s)
+ 3.85375 (0.154963s)
</p>
</td>
<td>
<p>
- 3.59601 (0.154463s)
+ 2.91129 (0.153447s)
</p>
</td>
</tr>
@@ -2398,22 +4037,22 @@
</td>
<td>
<p>
- 16.2706 (0.329134s)
+ 10.8218 (0.319975s)
</p>
</td>
<td>
<p>
- 12.9494 (0.342258s)
+ 9.05203 (0.326747s)
</p>
</td>
<td>
<p>
- 11.3305 (0.35139s)
+ 8.32597 (0.334795s)
</p>
</td>
<td>
<p>
- 14.1712 (0.608709s)
+ 10.948 (0.577039s)
</p>
</td>
</tr>
@@ -2421,8 +4060,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator7"></a><p class="title"><b>Table 1.35. Operator |</b></p>
-<div class="table-contents"><table class="table" summary="Operator |">
+<a name="boost_multiprecision.perf.integer_performance.operator6"></a><p class="title"><b>Table 1.57. Operator ^</b></p>
+<div class="table-contents"><table class="table" summary="Operator ^">
<colgroup>
<col>
<col>
@@ -2466,22 +4105,22 @@
</td>
<td>
<p>
- 1.34742 (0.0296944s)
+ <span class="bold"><strong>1</strong></span> (0.0311003s)
</p>
</td>
<td>
<p>
- 1.25923 (0.0384846s)
+ <span class="bold"><strong>1</strong></span> (0.0430909s)
</p>
</td>
<td>
<p>
- 1.20517 (0.0493908s)
+ <span class="bold"><strong>1</strong></span> (0.0530915s)
</p>
</td>
<td>
<p>
- 1.10536 (0.0761343s)
+ <span class="bold"><strong>1</strong></span> (0.0842599s)
</p>
</td>
</tr>
@@ -2493,22 +4132,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0220379s)
+ 1.04721 (0.0325686s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.030562s)
+ 1.18557 (0.0510874s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0409823s)
+ 1.25714 (0.0667433s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0688775s)
+ 1.14462 (0.0964459s)
</p>
</td>
</tr>
@@ -2520,22 +4159,22 @@
</td>
<td>
<p>
- 2.14429 (0.0472558s)
+ 1.59277 (0.0495356s)
</p>
</td>
<td>
<p>
- 1.95901 (0.0598712s)
+ 1.47967 (0.0637601s)
</p>
</td>
<td>
<p>
- 2.07584 (0.0850728s)
+ 1.73243 (0.0919772s)
</p>
</td>
<td>
<p>
- 1.94265 (0.133805s)
+ 1.68499 (0.141977s)
</p>
</td>
</tr>
@@ -2547,22 +4186,22 @@
</td>
<td>
<p>
- 5.98286 (0.13185s)
+ 4.17425 (0.12982s)
</p>
</td>
<td>
<p>
- 4.65705 (0.142329s)
+ 3.41013 (0.146946s)
</p>
</td>
<td>
<p>
- 3.85812 (0.158115s)
+ 2.8988 (0.153902s)
</p>
</td>
<td>
<p>
- 4.81524 (0.331662s)
+ 4.17074 (0.351426s)
</p>
</td>
</tr>
@@ -2570,8 +4209,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_int6"></a><p class="title"><b>Table 1.36. Operator |(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator |(int)">
+<a name="boost_multiprecision.perf.integer_performance.operator_int6"></a><p class="title"><b>Table 1.58. Operator ^(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator ^(int)">
<colgroup>
<col>
<col>
@@ -2615,22 +4254,22 @@
</td>
<td>
<p>
- 1.40808 (0.0389721s)
+ <span class="bold"><strong>1</strong></span> (0.0290428s)
</p>
</td>
<td>
<p>
- 1.65035 (0.0437872s)
+ <span class="bold"><strong>1</strong></span> (0.0360261s)
</p>
</td>
<td>
<p>
- 1.51667 (0.0466144s)
+ <span class="bold"><strong>1</strong></span> (0.0409722s)
</p>
</td>
<td>
<p>
- 1.37806 (0.0582842s)
+ <span class="bold"><strong>1</strong></span> (0.0541785s)
</p>
</td>
</tr>
@@ -2642,22 +4281,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0276775s)
+ 1.01484 (0.0294736s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.026532s)
+ 1.4898 (0.0536716s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0307348s)
+ 1.34782 (0.0552234s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0422945s)
+ 1.35054 (0.0731703s)
</p>
</td>
</tr>
@@ -2669,22 +4308,22 @@
</td>
<td>
<p>
- 5.31451 (0.147092s)
+ 4.94574 (0.143638s)
</p>
</td>
<td>
<p>
- 5.37333 (0.142565s)
+ 4.05569 (0.146111s)
</p>
</td>
<td>
<p>
- 4.86508 (0.149527s)
+ 3.65257 (0.149654s)
</p>
</td>
<td>
<p>
- 3.74364 (0.158335s)
+ 2.89039 (0.156597s)
</p>
</td>
</tr>
@@ -2696,22 +4335,22 @@
</td>
<td>
<p>
- 11.9312 (0.330226s)
+ 10.8939 (0.316389s)
</p>
</td>
<td>
<p>
- 12.943 (0.343403s)
+ 9.21322 (0.331916s)
</p>
</td>
<td>
<p>
- 11.4457 (0.35178s)
+ 8.17995 (0.335151s)
</p>
</td>
<td>
<p>
- 14.4462 (0.610997s)
+ 10.6902 (0.579178s)
</p>
</td>
</tr>
@@ -2719,8 +4358,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_gcd"></a><p class="title"><b>Table 1.37. Operator gcd</b></p>
-<div class="table-contents"><table class="table" summary="Operator gcd">
+<a name="boost_multiprecision.perf.integer_performance.operator___"></a><p class="title"><b>Table 1.59. Operator <<</b></p>
+<div class="table-contents"><table class="table" summary="Operator <<">
<colgroup>
<col>
<col>
@@ -2764,22 +4403,22 @@
</td>
<td>
<p>
- 1.82514 (4.45586s)
+ <span class="bold"><strong>1</strong></span> (0.0253777s)
</p>
</td>
<td>
<p>
- 1.75955 (10.1748s)
+ 1.04239 (0.034484s)
</p>
</td>
<td>
<p>
- 1.87025 (25.23s)
+ <span class="bold"><strong>1</strong></span> (0.0420979s)
</p>
</td>
<td>
<p>
- 2.11453 (68.8556s)
+ <span class="bold"><strong>1</strong></span> (0.0623485s)
</p>
</td>
</tr>
@@ -2791,22 +4430,22 @@
</td>
<td>
<p>
- 1.57965 (3.85654s)
+ 1.05039 (0.0266563s)
</p>
</td>
<td>
<p>
- 1.67404 (9.68027s)
+ 1.40679 (0.0465388s)
</p>
</td>
<td>
<p>
- 1.8405 (24.8287s)
+ 1.34077 (0.0564434s)
</p>
</td>
<td>
<p>
- 2.27588 (74.1096s)
+ 1.20319 (0.0750171s)
</p>
</td>
</tr>
@@ -2818,22 +4457,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (2.44138s)
+ 1.0359 (0.0262888s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (5.78259s)
+ <span class="bold"><strong>1</strong></span> (0.0330815s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (13.4902s)
+ 1.1625 (0.0489388s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (32.5631s)
+ 1.16511 (0.0726428s)
</p>
</td>
</tr>
@@ -2845,22 +4484,22 @@
</td>
<td>
<p>
- 5.01357 (12.24s)
+ 1.65904 (0.0421025s)
</p>
</td>
<td>
<p>
- 4.38161 (25.337s)
+ 2.11201 (0.0698686s)
</p>
</td>
<td>
<p>
- 4.08681 (55.1319s)
+ 2.36727 (0.0996572s)
</p>
</td>
<td>
<p>
- 4.01045 (130.593s)
+ 2.701 (0.168403s)
</p>
</td>
</tr>
@@ -2868,8 +4507,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.integer_performance.operator_str"></a><p class="title"><b>Table 1.38. Operator str</b></p>
-<div class="table-contents"><table class="table" summary="Operator str">
+<a name="boost_multiprecision.perf.integer_performance.operator7"></a><p class="title"><b>Table 1.60. Operator >></b></p>
+<div class="table-contents"><table class="table" summary="Operator >>">
<colgroup>
<col>
<col>
@@ -2913,22 +4552,22 @@
</td>
<td>
<p>
- 1.46421 (0.00195137s)
+ <span class="bold"><strong>1</strong></span> (0.0221035s)
</p>
</td>
<td>
<p>
- 1.21669 (0.00319216s)
+ 1.0337 (0.0313761s)
</p>
</td>
<td>
<p>
- 1.25041 (0.00765237s)
+ 1.03419 (0.0355718s)
</p>
</td>
<td>
<p>
- 1.53339 (0.0218096s)
+ 1.20366 (0.0453508s)
</p>
</td>
</tr>
@@ -2940,22 +4579,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.00133271s)
+ 1.1036 (0.0243933s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.00262366s)
+ 1.12323 (0.0340936s)
</p>
</td>
<td>
<p>
- 1.0109 (0.00618661s)
+ 1.40181 (0.0482162s)
</p>
</td>
<td>
<p>
- 1.24429 (0.0176978s)
+ 1.69985 (0.0640463s)
</p>
</td>
</tr>
@@ -2967,22 +4606,22 @@
</td>
<td>
<p>
- 1.7777 (0.00236916s)
+ 1.30456 (0.0288354s)
</p>
</td>
<td>
<p>
- 1.27408 (0.00334274s)
+ <span class="bold"><strong>1</strong></span> (0.0303532s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.00611991s)
+ <span class="bold"><strong>1</strong></span> (0.0343958s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0142232s)
+ <span class="bold"><strong>1</strong></span> (0.0376776s)
</p>
</td>
</tr>
@@ -2994,22 +4633,22 @@
</td>
<td>
<p>
- 11.9797 (0.0159654s)
+ 10.5766 (0.233779s)
</p>
</td>
<td>
<p>
- 18.3349 (0.0481046s)
+ 9.0959 (0.27609s)
</p>
</td>
<td>
<p>
- 18.3681 (0.112411s)
+ 8.6249 (0.29666s)
</p>
</td>
<td>
<p>
- 25.0355 (0.356085s)
+ 13.6818 (0.515498s)
</p>
</td>
</tr>
Added: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html
==============================================================================
--- (empty file)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -0,0 +1,186 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>The Overhead in the Number Class Wrapper</title>
+<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision">
+<link rel="up" href="../perf.html" title="Performance Comparison">
+<link rel="prev" href="../perf.html" title="Performance Comparison">
+<link rel="next" href="realworld.html" title="Floating Point Real World Tests">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="spirit-nav">
+<a accesskey="p" href="../perf.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="realworld.html"><img src="../../images/next.png" alt="Next"></a>
+</div>
+<div class="section boost_multiprecision_perf_overhead">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_multiprecision.perf.overhead"></a><a class="link" href="overhead.html" title="The Overhead in the Number Class Wrapper">The Overhead in the
+ Number Class Wrapper</a>
+</h3></div></div></div>
+<p>
+ Using a simple <a href="../../../../performance/arithmetic_backend.hpp" target="_top">backend
+ class</a> that wraps any built in arithmetic type we can measure the
+ overhead involved in wrapping a type inside the <code class="computeroutput"><span class="identifier">number</span></code>
+ frontend, and the effect that turning on expression templates has. The following
+ table compares the performance between <code class="computeroutput"><span class="keyword">double</span></code>
+ and a <code class="computeroutput"><span class="keyword">double</span></code> wrapped inside
+ class <code class="computeroutput"><span class="identifier">number</span></code>:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Bessel Function Evaluation
+ </p>
+ </th>
+<th>
+ <p>
+ Non-Central T Evaluation
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">double</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0 (0.016s)</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span> (0.46s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">double</span><span class="special">>,</span>
+ <span class="identifier">et_off</span><span class="special">></span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (0.019s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span>(0.46s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">double</span><span class="special">>,</span>
+ <span class="identifier">et_on</span><span class="special">></span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (0.019s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.7 (0.79s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ As you can see whether there is an overhead, and how large it is depends
+ on the actual situation, but the overhead is in any cases small. Expression
+ templates generally add a greater overhead the more complex the expression
+ becomes due to the logic of figuring out how to best unpack and evaluate
+ the expression, but of course this is also the situation where you save more
+ temporaries. For a "trivial" backend like this, saving temporaries
+ has no benefit, but for larger types it becomes a bigger win.
+ </p>
+<p>
+ The following table compares arithmetic using either <code class="computeroutput"><span class="keyword">long</span>
+ <span class="keyword">long</span></code> or <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">></span> <span class="special">></span></code> for the <a href="../../../../performance/voronoi_perfromance.cpp" target="_top">voronoi-diagram
+ builder test</a>:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Relative time
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span>(0.0823s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special"><</span><span class="identifier">arithmetic_backend</span><span class="special"><</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">>,</span> <span class="identifier">et_off</span><span class="special">></span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05 (0.0875s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ This test involves mainly creating a lot of temporaries and performing a
+ small amount of arithmetic on them, with very little difference in performance
+ between the native and "wrapped" types.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2002-2012 John Maddock and Christopher Kormanyos<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../perf.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="realworld.html"><img src="../../images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -33,7 +33,7 @@
The tests were run on 32-bit Windows Vista machine.
</p>
<div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator__"></a><p class="title"><b>Table 1.39. Operator +</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator__"></a><p class="title"><b>Table 1.61. Operator +</b></p>
<div class="table-contents"><table class="table" summary="Operator +">
<colgroup>
<col>
@@ -78,22 +78,22 @@
</td>
<td>
<p>
- 5.91758 (18.1263s)
+ 5.89417 (18.4116s)
</p>
</td>
<td>
<p>
- 6.60754 (44.1182s)
+ 6.87256 (47.4698s)
</p>
</td>
<td>
<p>
- 6.65334 (103.169s)
+ 6.65008 (107.715s)
</p>
</td>
<td>
<p>
- 6.44717 (244.055s)
+ 6.53801 (256.244s)
</p>
</td>
</tr>
@@ -105,22 +105,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (3.06312s)
+ <span class="bold"><strong>1</strong></span> (3.1237s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (6.67695s)
+ <span class="bold"><strong>1</strong></span> (6.90715s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (15.5064s)
+ <span class="bold"><strong>1</strong></span> (16.1975s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (37.8546s)
+ <span class="bold"><strong>1</strong></span> (39.1929s)
</p>
</td>
</tr>
@@ -128,7 +128,7 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator___int_"></a><p class="title"><b>Table 1.40. Operator +(int)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator___int_"></a><p class="title"><b>Table 1.62. Operator +(int)</b></p>
<div class="table-contents"><table class="table" summary="Operator +(int)">
<colgroup>
<col>
@@ -173,22 +173,22 @@
</td>
<td>
<p>
- 3.98512 (2.67249s)
+ 3.62367 (2.46488s)
</p>
</td>
<td>
<p>
- 4.24335 (3.04309s)
+ 4.18291 (2.94603s)
</p>
</td>
<td>
<p>
- 4.65009 (3.83046s)
+ 4.726 (3.74866s)
</p>
</td>
<td>
<p>
- 5.45832 (5.08346s)
+ 6.1388 (5.56817s)
</p>
</td>
</tr>
@@ -200,22 +200,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.670618s)
+ <span class="bold"><strong>1</strong></span> (0.680215s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.717144s)
+ <span class="bold"><strong>1</strong></span> (0.704303s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.823739s)
+ <span class="bold"><strong>1</strong></span> (0.7932s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.931322s)
+ <span class="bold"><strong>1</strong></span> (0.907046s)
</p>
</td>
</tr>
@@ -223,7 +223,197 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator0"></a><p class="title"><b>Table 1.41. Operator -</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator___unsigned_long_long_"></a><p class="title"><b>Table 1.63. Operator +(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1527 (2.6378s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31751 (3.09863s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.58996 (4.00714s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.15642 (5.75702s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.28837s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.35189s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.52028s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.66971s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator____unsigned_long_long_"></a><p class="title"><b>Table 1.64. Operator +=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.18436 (2.7059s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.32279 (3.11099s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.61398 (4.05389s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.20048 (5.84623s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.2847s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.35183s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.51174s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.6568s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator0"></a><p class="title"><b>Table 1.65. Operator -</b></p>
<div class="table-contents"><table class="table" summary="Operator -">
<colgroup>
<col>
@@ -268,22 +458,22 @@
</td>
<td>
<p>
- 5.91504 (18.2374s)
+ 5.81893 (18.3457s)
</p>
</td>
<td>
<p>
- 6.55676 (43.8659s)
+ 6.82209 (47.1928s)
</p>
</td>
<td>
<p>
- 6.66239 (103.481s)
+ 6.64143 (107.498s)
</p>
</td>
<td>
<p>
- 6.47224 (244.887s)
+ 6.51362 (255.137s)
</p>
</td>
</tr>
@@ -295,22 +485,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (3.08322s)
+ <span class="bold"><strong>1</strong></span> (3.15277s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (6.69018s)
+ <span class="bold"><strong>1</strong></span> (6.91765s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (15.5321s)
+ <span class="bold"><strong>1</strong></span> (16.1859s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (37.8365s)
+ <span class="bold"><strong>1</strong></span> (39.1698s)
</p>
</td>
</tr>
@@ -318,7 +508,7 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_int0"></a><p class="title"><b>Table 1.42. Operator -(int)</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_int0"></a><p class="title"><b>Table 1.66. Operator -(int)</b></p>
<div class="table-contents"><table class="table" summary="Operator -(int)">
<colgroup>
<col>
@@ -363,22 +553,22 @@
</td>
<td>
<p>
- 3.96173 (2.66785s)
+ 3.72441 (2.48756s)
</p>
</td>
<td>
<p>
- 4.36532 (3.09023s)
+ 4.27663 (2.98713s)
</p>
</td>
<td>
<p>
- 4.59363 (3.74494s)
+ 4.62109 (3.72114s)
</p>
</td>
<td>
<p>
- 5.43075 (5.09156s)
+ 6.17605 (5.56503s)
</p>
</td>
</tr>
@@ -390,22 +580,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.673405s)
+ <span class="bold"><strong>1</strong></span> (0.667908s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.707904s)
+ <span class="bold"><strong>1</strong></span> (0.698479s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.815246s)
+ <span class="bold"><strong>1</strong></span> (0.805252s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.937541s)
+ <span class="bold"><strong>1</strong></span> (0.901066s)
</p>
</td>
</tr>
@@ -413,8 +603,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator1"></a><p class="title"><b>Table 1.43. Operator *</b></p>
-<div class="table-contents"><table class="table" summary="Operator *">
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long0"></a><p class="title"><b>Table 1.67. Operator -(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
<colgroup>
<col>
<col>
@@ -458,22 +648,22 @@
</td>
<td>
<p>
- 5.59286 (32.3559s)
+ 1.15627 (2.63239s)
</p>
</td>
<td>
<p>
- 6.54125 (82.4247s)
+ 1.32096 (3.12092s)
</p>
</td>
<td>
<p>
- 6.8815 (197.198s)
+ 1.61044 (4.00106s)
</p>
</td>
<td>
<p>
- 6.84066 (473.057s)
+ 2.19378 (5.7644s)
</p>
</td>
</tr>
@@ -485,22 +675,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (5.78521s)
+ <span class="bold"><strong>1</strong></span> (2.27663s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (12.6008s)
+ <span class="bold"><strong>1</strong></span> (2.36262s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (28.6562s)
+ <span class="bold"><strong>1</strong></span> (2.48445s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (69.1537s)
+ <span class="bold"><strong>1</strong></span> (2.62761s)
</p>
</td>
</tr>
@@ -508,8 +698,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_int1"></a><p class="title"><b>Table 1.44. Operator *(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator *(int)">
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long1"></a><p class="title"><b>Table 1.68. Operator -=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
<colgroup>
<col>
<col>
@@ -553,22 +743,22 @@
</td>
<td>
<p>
- 2.70193 (3.1466s)
+ 1.1984 (2.73444s)
</p>
</td>
<td>
<p>
- 3.10134 (3.79056s)
+ 1.34141 (3.15698s)
</p>
</td>
<td>
<p>
- 3.659 (4.93935s)
+ 1.64159 (4.06997s)
</p>
</td>
<td>
<p>
- 4.61372 (6.89845s)
+ 2.23017 (5.88108s)
</p>
</td>
</tr>
@@ -580,22 +770,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.16457s)
+ <span class="bold"><strong>1</strong></span> (2.28174s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.22223s)
+ <span class="bold"><strong>1</strong></span> (2.35348s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.34992s)
+ <span class="bold"><strong>1</strong></span> (2.47929s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.4952s)
+ <span class="bold"><strong>1</strong></span> (2.63706s)
</p>
</td>
</tr>
@@ -603,8 +793,8 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator2"></a><p class="title"><b>Table 1.45. Operator /</b></p>
-<div class="table-contents"><table class="table" summary="Operator /">
+<a name="boost_multiprecision.perf.rational_performance.operator1"></a><p class="title"><b>Table 1.69. Operator *</b></p>
+<div class="table-contents"><table class="table" summary="Operator *">
<colgroup>
<col>
<col>
@@ -648,22 +838,22 @@
</td>
<td>
<p>
- 4.36846 (63.9498s)
+ 5.4306 (32.5882s)
</p>
</td>
<td>
<p>
- 5.52565 (145.045s)
+ 6.91805 (89.9436s)
</p>
</td>
<td>
<p>
- 6.18331 (328.069s)
+ 6.94556 (207.307s)
</p>
</td>
<td>
<p>
- 6.49822 (784.806s)
+ 6.88704 (492.151s)
</p>
</td>
</tr>
@@ -675,22 +865,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (14.639s)
+ <span class="bold"><strong>1</strong></span> (6.00084s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (26.2494s)
+ <span class="bold"><strong>1</strong></span> (13.0013s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (53.0571s)
+ <span class="bold"><strong>1</strong></span> (29.8475s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (120.772s)
+ <span class="bold"><strong>1</strong></span> (71.4604s)
</p>
</td>
</tr>
@@ -698,8 +888,863 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_int2"></a><p class="title"><b>Table 1.46. Operator /(int)</b></p>
-<div class="table-contents"><table class="table" summary="Operator /(int)">
+<a name="boost_multiprecision.perf.rational_performance.operator_int1"></a><p class="title"><b>Table 1.70. Operator *(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 2.12892 (2.51376s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.47245 (3.07841s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.86832 (3.93619s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.94086 (6.02565s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.18077s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.24508s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.3723s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.52902s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long2"></a><p class="title"><b>Table 1.71. Operator *(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.32254 (5.43565s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.56078 (6.73163s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.97701 (9.32522s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.85404 (15.1573s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.11002s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.313s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.71682s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (5.31082s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long3"></a><p class="title"><b>Table 1.72. Operator *=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 6.29806 (58.1188s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.30556 (59.5076s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.3385 (62.1007s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.55345 (67.6905s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.22804s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.43733s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.79739s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (10.329s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator2"></a><p class="title"><b>Table 1.73. Operator /</b></p>
+<div class="table-contents"><table class="table" summary="Operator /">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 4.4269 (66.8031s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.40103 (173.527s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.32347 (348.193s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.61148 (824.063s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (15.0903s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (27.1093s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (55.0637s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (124.641s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_int2"></a><p class="title"><b>Table 1.74. Operator /(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.78772 (2.50984s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.10623 (3.10606s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.46986 (3.99358s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.37428 (5.96678s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.40393s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.4747s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.61693s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.76831s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long4"></a><p class="title"><b>Table 1.75. Operator /(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.29695 (5.45454s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.55248 (6.85353s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.93237 (9.28765s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.75211 (14.8541s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.20568s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.41458s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.80635s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (5.39734s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_unsigned_long_long5"></a><p class="title"><b>Table 1.76. Operator /=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 6.19401 (58.4278s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.20135 (59.643s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.21327 (62.0338s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.40576 (67.6778s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.43295s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.61774s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.98407s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (10.5652s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_construct"></a><p class="title"><b>Table 1.77. Operator construct</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00978288s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0100574s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0101393s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0101847s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 39.1516 (0.383015s)
+ </p>
+ </td>
+<td>
+ <p>
+ 38.3523 (0.385725s)
+ </p>
+ </td>
+<td>
+ <p>
+ 37.5812 (0.381048s)
+ </p>
+ </td>
+<td>
+ <p>
+ 37.6007 (0.382953s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned_"></a><p class="title"><b>Table 1.78. Operator construct(unsigned)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0548151s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0557542s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.055825s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0552808s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 7.21073 (0.395257s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.1016 (0.395944s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.02046 (0.391917s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.16881 (0.396297s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<a name="boost_multiprecision.perf.rational_performance.operator_construct_unsigned_long_long_"></a><p class="title"><b>Table 1.79. Operator construct(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned long long)">
<colgroup>
<col>
<col>
@@ -743,22 +1788,22 @@
</td>
<td>
<p>
- 2.26643 (3.13785s)
+ <span class="bold"><strong>1</strong></span> (0.0605156s)
</p>
</td>
<td>
<p>
- 2.57125 (3.76931s)
+ <span class="bold"><strong>1</strong></span> (0.0616657s)
</p>
</td>
<td>
<p>
- 3.20872 (5.06758s)
+ <span class="bold"><strong>1</strong></span> (0.0592056s)
</p>
</td>
<td>
<p>
- 4.02177 (7.17803s)
+ <span class="bold"><strong>1</strong></span> (0.0603081s)
</p>
</td>
</tr>
@@ -770,22 +1815,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.38449s)
+ 35.1604 (2.12775s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.46594s)
+ 34.7575 (2.14335s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.57931s)
+ 35.7232 (2.11502s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (1.78479s)
+ 35.0437 (2.11342s)
</p>
</td>
</tr>
@@ -793,7 +1838,7 @@
</table></div>
</div>
<br class="table-break"><div class="table">
-<a name="boost_multiprecision.perf.rational_performance.operator_str"></a><p class="title"><b>Table 1.47. Operator str</b></p>
+<a name="boost_multiprecision.perf.rational_performance.operator_str"></a><p class="title"><b>Table 1.80. Operator str</b></p>
<div class="table-contents"><table class="table" summary="Operator str">
<colgroup>
<col>
@@ -838,22 +1883,22 @@
</td>
<td>
<p>
- 5.40493 (0.0199393s)
+ 5.48898 (0.0208949s)
</p>
</td>
<td>
<p>
- 8.55089 (0.0511907s)
+ 8.49668 (0.0546688s)
</p>
</td>
<td>
<p>
- 9.91026 (0.118839s)
+ 10.107 (0.121897s)
</p>
</td>
<td>
<p>
- 9.93546 (0.285367s)
+ 10.5339 (0.310584s)
</p>
</td>
</tr>
@@ -865,22 +1910,22 @@
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.00368909s)
+ <span class="bold"><strong>1</strong></span> (0.0038067s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.00598659s)
+ <span class="bold"><strong>1</strong></span> (0.00643413s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.0119915s)
+ <span class="bold"><strong>1</strong></span> (0.0120606s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1</strong></span> (0.028722s)
+ <span class="bold"><strong>1</strong></span> (0.0294843s)
</p>
</td>
</tr>
Modified: sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -6,12 +6,12 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
<link rel="home" href="../../index.html" title="Chapter 1. Boost.Multiprecision">
<link rel="up" href="../perf.html" title="Performance Comparison">
-<link rel="prev" href="../perf.html" title="Performance Comparison">
+<link rel="prev" href="overhead.html" title="The Overhead in the Number Class Wrapper">
<link rel="next" href="int_real_world.html" title="Integer Real World Tests">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
-<a accesskey="p" href="../perf.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="int_real_world.html"><img src="../../images/next.png" alt="Next"></a>
+<a accesskey="p" href="overhead.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="int_real_world.html"><img src="../../images/next.png" alt="Next"></a>
</div>
<div class="section boost_multiprecision_perf_realworld">
<div class="titlepage"><div><div><h3 class="title">
@@ -66,12 +66,29 @@
</td>
<td>
<p>
- <span class="bold"><strong>1.0</strong></span> (6.472s)
+ 1.2 (5.78s)
</p>
</td>
<td>
<p>
- 1.193 (10.154s)
+ 1.2 (9.56s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ static_mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (5.47s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (9.09s)
</p>
</td>
</tr>
@@ -83,12 +100,12 @@
</td>
<td>
<p>
- 1.801 (11.662s)
+ <span class="bold"><strong>1.0</strong></span> (4.82s)
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1.0</strong></span>(8.511s)
+ <span class="bold"><strong>1.0</strong></span>(8.07s)
</p>
</td>
</tr>
@@ -100,12 +117,12 @@
</td>
<td>
<p>
- 3.13 (20.285s)
+ 1.8 (8.54s)
</p>
</td>
<td>
<p>
- 2.46 (21.019s)
+ 2.6 (20.66s)
</p>
</td>
</tr>
@@ -117,12 +134,12 @@
</td>
<td>
<p>
- 1.001 (6.480s)
+ 1.3 (6.28s)
</p>
</td>
<td>
<p>
- 1.15(9.805s)
+ 1.2(10.06s)
</p>
</td>
</tr>
@@ -134,12 +151,12 @@
</td>
<td>
<p>
- 1.542 (9.981s)
+ 2.0 (9.54s)
</p>
</td>
<td>
<p>
- 1.61 (13.702s)
+ 1.7 (14.08s)
</p>
</td>
</tr>
@@ -152,7 +169,6 @@
<colgroup>
<col>
<col>
-<col>
</colgroup>
<thead><tr>
<th>
@@ -165,11 +181,6 @@
50 Decimal Digits
</p>
</th>
-<th>
- <p>
- 100 Decimal Digits
- </p>
- </th>
</tr></thead>
<tbody>
<tr>
@@ -180,29 +191,31 @@
</td>
<td>
<p>
- 1.308 (258.09s)
+ 1.3 (263.27s)
</p>
</td>
+</tr>
+<tr>
<td>
<p>
- 1.30 (516.74s)
+ static_mpfr_float
</p>
</td>
-</tr>
-<tr>
<td>
<p>
- mpf_float
+ 1.2 (232.88s)
</p>
</td>
+</tr>
+<tr>
<td>
<p>
- <span class="bold"><strong>1.0</strong></span> (197.30s)
+ mpf_float
</p>
</td>
<td>
<p>
- <span class="bold"><strong>1.0</strong></span>(397.30s)
+ <span class="bold"><strong>1.0</strong></span> (195.73s)
</p>
</td>
</tr>
@@ -214,12 +227,7 @@
</td>
<td>
<p>
- 1.695 (334.50s)
- </p>
- </td>
-<td>
- <p>
- 2.68 (1064.53s)
+ 1.9 (366.38s)
</p>
</td>
</tr>
@@ -231,12 +239,7 @@
</td>
<td>
<p>
- 1.35 (266.39s)
- </p>
- </td>
-<td>
- <p>
- 1.323 (525.74s)
+ 1.5 (286.94s)
</p>
</td>
</tr>
@@ -248,12 +251,7 @@
</td>
<td>
<p>
- 1.75 (346.64s)
- </p>
- </td>
-<td>
- <p>
- 1.635 (649.94s)
+ 2.0 (388.70s)
</p>
</td>
</tr>
@@ -272,7 +270,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="../perf.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="int_real_world.html"><img src="../../images/next.png" alt="Next"></a>
+<a accesskey="p" href="overhead.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="int_real_world.html"><img src="../../images/next.png" alt="Next"></a>
</div>
</body>
</html>
Modified: sandbox/big_number/libs/multiprecision/doc/html/index.html
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/html/index.html (original)
+++ sandbox/big_number/libs/multiprecision/doc/html/index.html 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -96,6 +96,8 @@
</dl></dd>
<dt><span class="section">Performance Comparison</span></dt>
<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/perf/overhead.html">The Overhead in the
+ Number Class Wrapper</a></span></dt>
<dt><span class="section"><a href="boost_multiprecision/perf/realworld.html">Floating Point Real
World Tests</a></span></dt>
<dt><span class="section"><a href="boost_multiprecision/perf/int_real_world.html">Integer Real
@@ -125,7 +127,7 @@
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: November 12, 2012 at 19:14:07 GMT</small></p></td>
+<td align="left"><p><small>Last revised: November 18, 2012 at 15:59:30 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
Modified: sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk
==============================================================================
--- sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk (original)
+++ sandbox/big_number/libs/multiprecision/doc/multiprecision.qbk 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -288,10 +288,10 @@
we see the following typical results for polynomial execution:
[table Evaluation of Order 6 Polynomial.
-[[Library][Relative Time][Relative number of memory allocations]]
-[[number][1.0 (0.00793s)][1.0 (2996 total)]]
-[[[mpfr_class]][1.2 (0.00931s)][4.3 (12976 total)]]
-[[[mpreal]][1.9 (0.0148s)][9.3 (27947 total)]]
+[[Library] [Relative Time] [Relative number of memory allocations]]
+[[number] [1.0 (0.00957s)] [1.0 (2996 total)]]
+[[[mpfr_class]] [1.1 (0.0102s)] [4.3 (12976 total)]]
+[[[mpreal]] [1.6 (0.0151s)] [9.3 (27947 total)]]
]
As you can see, the execution time increases a lot more slowly than the number of memory allocations. There are
@@ -314,21 +314,21 @@
(50 decimal digits):
[table Evaluation of Boost.Math's Bessel function test data
-[[Library][Relative Time][Relative Number of Memory Allocations]]
-[[mpfr_float_50] [1.0 (5.66s)] [1.0 (1611963)]]
+[[Library] [Relative Time] [Relative Number of Memory Allocations]]
+[[mpfr_float_50] [1.0 (5.78s)] [1.0 (1611963)]]
[[number<mpfr_float_backend<50>, et_off>[br](but with rvalue reference support)]
- [1.10 (6.25s)][2.64 (4260868)]]
-[[[mpfr_class]] [1.09 (6.16s)][2.45 (3948316)]]
-[[[mpreal]] [1.65 (9.34s)][8.21 (13226029)]]
+ [1.1 (6.29s)] [2.64 (4260868)]]
+[[[mpfr_class]] [1.1 (6.28s)] [2.45 (3948316)]]
+[[[mpreal]] [1.65 (9.54s)] [8.21 (13226029)]]
]
[table Evaluation of Boost.Math's Non-Central T distribution test data
[[Library][Relative Time][Relative Number of Memory Allocations]]
-[[number] [1.0 (257s)][1.0 (127710873)]]
+[[number] [1.0 (263s)][1.0 (127710873)]]
[[number<mpfr_float_backend<50>, et_off>[br](but with rvalue reference support)]
- [1.0 (257s)][1.2 (156797871)]]
-[[[mpfr_class]] [1.1 (280s)][2.1 (268336640)]]
-[[[mpreal]] [1.4 (363s)][3.6 (466960653)]]
+ [1.0 (260s)][1.2 (156797871)]]
+[[[mpfr_class]] [1.1 (287s)][2.1 (268336640)]]
+[[[mpreal]] [1.5 (389s)][3.6 (466960653)]]
]
The above results were generated on Win32 compiling with Visual C++ 2010, all optimizations on (/Ox),
@@ -2669,6 +2669,41 @@
[section:perf Performance Comparison]
+[section:overhead The Overhead in the Number Class Wrapper]
+
+Using a simple [@../../performance/arithmetic_backend.hpp backend class] that wraps any built in arithmetic type
+we can measure the overhead involved in wrapping a type inside the `number` frontend, and the effect that turning
+on expression templates has. The following table compares the performance between `double` and a `double` wrapped
+inside class `number`:
+
+[table
+[[Type][Bessel Function Evaluation][Non-Central T Evaluation]]
+[[`double`] [[*1.0 (0.016s)]] [[*1.0] (0.46s)]]
+[[`number<arithmetic_backend<double>, et_off>`] [1.2 (0.019s)] [[*1.0](0.46s)]]
+[[`number<arithmetic_backend<double>, et_on>`] [1.2 (0.019s)] [1.7 (0.79s)]]
+]
+
+As you can see whether there is an overhead, and how large it is depends on the actual situation,
+but the overhead is in any cases small. Expression templates generally add a greater overhead the
+more complex the expression becomes due to the logic of figuring out how to best unpack and evaluate
+the expression, but of course this is also the situation where you save more temporaries. For a
+"trivial" backend like this, saving temporaries has no benefit, but for larger types it becomes
+a bigger win.
+
+The following table compares arithmetic using either `long long` or `number<arithmetic_backend<long long> >`
+for the [@../../performance/voronoi_perfromance.cpp voronoi-diagram builder test]:
+
+[table
+[[Type][Relative time]]
+[[`long long`][[*1.0](0.0823s)]]
+[[`number<arithmetic_backend<long long>, et_off>`][1.05 (0.0875s)]]
+]
+
+This test involves mainly creating a lot of temporaries and performing a small amount of arithmetic on them,
+with very little difference in performance between the native and "wrapped" types.
+
+[endsect]
+
[section:realworld Floating Point Real World Tests]
These tests test the total time taken to execute all of Boost.Math's test cases for these functions.
@@ -2683,53 +2718,80 @@
[table Bessel Function Performance
[[Library][50 Decimal Digits][100 Decimal Digits]]
-[[mpfr_float][[*1.0] (6.472s)][1.193 (10.154s)]]
-[[mpf_float][1.801 (11.662s)][[*1.0](8.511s)]]
-[[cpp_dec_float][3.13 (20.285s)][2.46 (21.019s)]]
-[[[mpfr_class]][1.001 (6.480s)][1.15(9.805s)]]
-[[[mpreal]][1.542 (9.981s)][1.61 (13.702s)]]
+[[mpfr_float] [1.2 (5.78s)] [1.2 (9.56s)]]
+[[static_mpfr_float] [1.1 (5.47s)] [1.1 (9.09s)]]
+[[mpf_float] [[*1.0] (4.82s)] [[*1.0](8.07s)]]
+[[cpp_dec_float] [1.8 (8.54s)] [2.6 (20.66s)]]
+[[[mpfr_class]] [1.3 (6.28s)] [1.2(10.06s)]]
+[[[mpreal]] [2.0 (9.54s)] [1.7 (14.08s)]]
]
[table Non-Central T Distribution Performance
-[[Library][50 Decimal Digits][100 Decimal Digits]]
-[[mpfr_float][1.308 (258.09s)][1.30 (516.74s)]]
-[[mpf_float][[*1.0] (197.30s)][[*1.0](397.30s)]]
-[[cpp_dec_float][1.695 (334.50s)][2.68 (1064.53s)]]
-[[[mpfr_class]][1.35 (266.39s)][1.323 (525.74s)]]
-[[[mpreal]][1.75 (346.64s)][1.635 (649.94s)]]
+[[Library][50 Decimal Digits]]
+[[mpfr_float] [1.3 (263.27s)]]
+[[static_mpfr_float] [1.2 (232.88s)]]
+[[mpf_float] [[*1.0] (195.73s)]]
+[[cpp_dec_float] [1.9 (366.38s)]]
+[[[mpfr_class]] [1.5 (286.94s)]]
+[[[mpreal]] [2.0 (388.70s)]]
]
[endsect]
[section:int_real_world Integer Real World Tests]
-These [@../../performance/miller_rabin_performance.cpp tests] measure the time taken to generate 1000 128-bit
-random numbers and test for primality using the Miller Rabin test.
-
Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
turned on (/Ox), and used MPIR-2.3.0 and [tommath]-0.42.0. The tests were run on 32-bit
Windows Vista machine.
+The first set of [@../../performance/voronoi_performance.cpp tests] measure the times taken to
+execute the multiprecision part of the Voronoi-diagram builder from Boost.Polygon. The tests
+mainly create a large number of temporaries "just in case" multiprecision arithmetic is required,
+for comparison, also included in the tests is Boost.Polygon's own partial-multiprecision integer
+type which was custom written for this specific task:
+
+[table
+[[Integer Type][Relative Performance (Actual time in parenthesis)]]
+[[polygon::detail::extended_int][1(0.138831s)]]
+[[int256_t][1.19247(0.165551s)]]
+[[int512_t][1.23301(0.17118s)]]
+[[int1024_t][1.21463(0.168628s)]]
+[[checked_int256_t][1.31711(0.182855s)]]
+[[checked_int512_t][1.57413(0.218538s)]]
+[[checked_int1024_t][1.36992(0.190187s)]]
+[[cpp_int][1.63244(0.226632s)]]
+[[mpz_int][5.42511(0.753172s)]]
+[[tom_int][29.0793(4.03709s)]]
+]
+
+Note how for this use case, any dynamic allocation is a performance killer.
+
+The next [@../../performance/miller_rabin_performance.cpp tests] measure the time taken to generate 1000 128-bit
+random numbers and test for primality using the Miller Rabin test. This is primarily a test of modular-exponentiation
+since that is the rate limiting step:
+
[table
-[[Integer Type][Relative (and Absolute) Times]]
-[[mpz_int][1.08279(0.370326s)]]
-[[mpz_int (no Expression templates)][1.1702(0.400222s)]]
-[[cpp_int][1.3612(0.465547s)]]
-[[cpp_int (no Expression templates)][1.33286(0.455854s)]]
-[[cpp_int (64-bit cache)][1.33134(0.455333s)]]
-[[cpp_int (256-bit cache)][1.29367(0.442451s)]]
-[[cpp_int (512-bit cache)][1.08821(0.37218s)]]
-[[cpp_int (1024-bit cache)][1.07902(0.369037s)]]
-[[int1024_t][1.02616(0.35096s)]]
-[[int1024_t (no Expression templates)][1(0.342011s)]]
-[[tom_int][3.74233(1.27992s)]]
-[[tom_int (no Expression templates)][3.97646(1.35999s)]]
+[[Integer Type][Relative Performance (Actual time in parenthesis)]]
+[[cpp_int][5.25827(0.379597s)]]
+[[cpp_int (no Expression templates)][5.15675(0.372268s)]]
+[[cpp_int (128-bit cache)][5.10882(0.368808s)]]
+[[cpp_int (256-bit cache)][5.50623(0.397497s)]]
+[[cpp_int (512-bit cache)][4.82257(0.348144s)]]
+[[cpp_int (1024-bit cache)][5.00053(0.360991s)]]
+[[int1024_t][4.37589(0.315897s)]]
+[[checked_int1024_t][4.52396(0.326587s)]]
+[[mpz_int][1(0.0721905s)]]
+[[mpz_int (no Expression templates)][1.0248(0.0739806s)]]
+[[tom_int][2.60673(0.188181s)]]
+[[tom_int (no Expression templates)][2.64997(0.191303s)]]
]
It's interesting to note that expression templates have little effect here - perhaps because the actual expressions involved
are relatively trivial in this case - so the time taken for multiplication and division tends to dominate. Also note
how increasing the internal cache size used by `cpp_int` is quite effective in this case in cutting out memory allocations
-altogether - cutting about a third off the total runtime.
+altogether - cutting about a third off the total runtime. Finally the much quicker times from GMP and tommath are down to their
+much better modular-exponentiation algorithms (GMP's is about 5x faster). That's an issue which needs to be addressed
+in a future release for __cpp_int.
[endsect]
@@ -2747,60 +2809,126 @@
Windows Vista machine.
[table Operator +
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][[*1] (0.02382s)][[*1] (0.0294619s)][[*1] (0.058466s)]]
-[[gmp_float][4.55086 (0.108402s)][3.86443 (0.113853s)][2.6241 (0.15342s)]]
-[[mpfr_float][2.52036 (0.060035s)][2.1833 (0.0643242s)][1.37736 (0.0805287s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0575156s)][[*1] (0.0740086s)][[*1] (0.219073s)]]
+[[gmp_float][2.45065 (0.14095s)][2.01398 (0.149052s)][1.09608 (0.240122s)]]
+[[mpfr_float][2.6001 (0.149546s)][2.12079 (0.156957s)][1.09078 (0.23896s)]]
]
[table Operator +(int)
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][1.56759 (0.0527023s)][1.74629 (0.0618102s)][1.68077 (0.105927s)]]
-[[gmp_float][[*1] (0.0336201s)][[*1] (0.0353951s)][[*1] (0.0630232s)]]
-[[mpfr_float][3.14875 (0.105861s)][3.15499 (0.111671s)][1.92831 (0.121528s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.46115 (0.0855392s)][2.60353 (0.114398s)][3.62562 (0.264905s)]]
+[[gmp_float][[*1] (0.0585424s)][[*1] (0.0439398s)][[*1] (0.0730648s)]]
+[[mpfr_float][2.40441 (0.14076s)][3.2877 (0.144461s)][2.40379 (0.175632s)]]
+]
+[table Operator +(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.118146s)][[*1] (0.144714s)][[*1] (0.315639s)]]
+[[gmp_float][4.5555 (0.538213s)][3.83096 (0.554395s)][1.95079 (0.615745s)]]
+[[mpfr_float][5.74477 (0.678719s)][4.85295 (0.702291s)][2.70354 (0.853342s)]]
+]
+[table Operator +=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.101188s)][[*1] (0.122394s)][[*1] (0.251975s)]]
+[[gmp_float][5.199 (0.526079s)][4.39327 (0.537712s)][2.42151 (0.610159s)]]
+[[mpfr_float][6.08318 (0.615547s)][5.18525 (0.634645s)][3.1022 (0.781677s)]]
]
[table Operator -
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][[*1] (0.0265783s)][[*1] (0.031465s)][[*1] (0.0619405s)]]
-[[gmp_float][4.66954 (0.124108s)][3.72645 (0.117253s)][2.67536 (0.165713s)]]
-[[mpfr_float][2.7909 (0.0741774s)][2.48557 (0.0782083s)][1.50944 (0.0934957s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0895163s)][[*1] (0.129248s)][1.5088 (0.374512s)]]
+[[gmp_float][1.72566 (0.154474s)][1.22567 (0.158415s)][[*1] (0.248219s)]]
+[[mpfr_float][1.83764 (0.164499s)][1.34284 (0.173559s)][1.00226 (0.248781s)]]
]
[table Operator -(int)
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][[*1] (0.0577674s)][[*1] (0.0633795s)][[*1] (0.11146s)]]
-[[gmp_float][2.31811 (0.133911s)][2.07251 (0.131355s)][1.67161 (0.186319s)]]
-[[mpfr_float][2.45081 (0.141577s)][2.29174 (0.145249s)][1.395 (0.155487s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.105285s)][[*1] (0.142741s)][[*1] (0.278718s)]]
+[[gmp_float][2.34437 (0.246828s)][1.28814 (0.183871s)][1.00731 (0.280754s)]]
+[[mpfr_float][2.8032 (0.295136s)][2.09178 (0.298582s)][1.25213 (0.34899s)]]
+]
+[table Operator -(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.13719s)][[*1] (0.184428s)][[*1] (0.344212s)]]
+[[gmp_float][4.0804 (0.559791s)][3.06776 (0.565781s)][2.07736 (0.715053s)]]
+[[mpfr_float][5.10114 (0.699828s)][3.88684 (0.716843s)][2.50074 (0.860784s)]]
+]
+[table Operator -=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.100984s)][[*1] (0.123148s)][[*1] (0.246181s)]]
+[[gmp_float][5.68353 (0.573944s)][4.68636 (0.577116s)][2.6958 (0.663655s)]]
+[[mpfr_float][6.19738 (0.625834s)][5.18544 (0.638577s)][3.18738 (0.784673s)]]
]
[table Operator *
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][1.07276 (0.287898s)][1.47724 (0.584569s)][1.55145 (5.09969s)]]
-[[gmp_float][[*1] (0.268372s)][[*1] (0.395718s)][[*1] (3.28705s)]]
-[[mpfr_float][1.27302 (0.341642s)][1.17649 (0.465557s)][1.14029 (3.7482s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.03667 (0.284251s)][1.30576 (0.536527s)][1.44686 (4.81057s)]]
+[[gmp_float][[*1] (0.274196s)][[*1] (0.410891s)][[*1] (3.32484s)]]
+[[mpfr_float][1.24537 (0.341477s)][1.15785 (0.475749s)][1.1796 (3.92199s)]]
]
[table Operator *(int)
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][2.89945 (0.11959s)][4.56335 (0.197945s)][9.03602 (0.742044s)]]
-[[gmp_float][[*1] (0.0412457s)][[*1] (0.0433772s)][[*1] (0.0821206s)]]
-[[mpfr_float][3.6951 (0.152407s)][3.71977 (0.161353s)][3.30958 (0.271785s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][3.97453 (0.240262s)][9.91222 (0.463473s)][50.7926 (4.36527s)]]
+[[gmp_float][[*1] (0.0604505s)][[*1] (0.0467577s)][[*1] (0.0859431s)]]
+[[mpfr_float][2.56974 (0.155342s)][3.56312 (0.166603s)][3.22964 (0.277565s)]]
+]
+[table Operator *(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.331877s)][1.01058 (0.586122s)][6.688 (4.7931s)]]
+[[gmp_float][1.72433 (0.572266s)][[*1] (0.579987s)][[*1] (0.716672s)]]
+[[mpfr_float][2.5553 (0.848047s)][1.74987 (1.0149s)][1.80403 (1.2929s)]]
+]
+[table Operator *=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.321397s)][1.00772 (0.574887s)][6.65946 (4.7468s)]]
+[[gmp_float][1.77419 (0.570218s)][[*1] (0.570482s)][[*1] (0.712791s)]]
+[[mpfr_float][2.62172 (0.842611s)][1.77691 (1.01369s)][1.77511 (1.26528s)]]
]
[table Operator /
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][3.24327 (4.00108s)][5.00532 (8.12985s)][6.79566 (54.2796s)]]
-[[gmp_float][[*1] (1.23366s)][[*1] (1.62424s)][[*1] (7.9874s)]]
-[[mpfr_float][1.32521 (1.63486s)][1.38967 (2.25716s)][1.72413 (13.7713s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.96096 (4.00777s)][4.53244 (7.86435s)][6.11936 (51.5509s)]]
+[[gmp_float][[*1] (1.35354s)][[*1] (1.73512s)][[*1] (8.42422s)]]
+[[mpfr_float][1.30002 (1.75963s)][1.39045 (2.41261s)][1.66762 (14.0484s)]]
]
[table Operator /(int)
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][1.45093 (0.253675s)][1.83306 (0.419569s)][2.3644 (1.64187s)]]
-[[gmp_float][[*1] (0.174836s)][[*1] (0.22889s)][[*1] (0.694411s)]]
-[[mpfr_float][1.16731 (0.204088s)][1.13211 (0.259127s)][1.02031 (0.708513s)]]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][8.60726 (1.8181s)][15.4122 (3.67479s)][34.5119 (24.729s)]]
+[[gmp_float][1.24394 (0.262756s)][[*1] (0.238433s)][[*1] (0.716536s)]]
+[[mpfr_float][[*1] (0.211229s)][1.12178 (0.26747s)][1.02237 (0.732562s)]]
+]
+[table Operator /(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.10976 (1.97569s)][3.73601 (3.9133s)][11.3085 (25.4533s)]]
+[[gmp_float][[*1] (0.936452s)][[*1] (1.04746s)][[*1] (2.25081s)]]
+[[mpfr_float][1.3423 (1.257s)][1.51575 (1.58768s)][3.31513 (7.46175s)]]
+]
+[table Operator /=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.17401 (1.96883s)][3.79591 (3.8965s)][11.2328 (25.2606s)]]
+[[gmp_float][[*1] (0.905621s)][[*1] (1.0265s)][[*1] (2.24882s)]]
+[[mpfr_float][1.37953 (1.24933s)][1.53073 (1.57129s)][3.30546 (7.43339s)]]
+]
+[table Operator construct
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.00929804s)][[*1] (0.0268321s)][[*1] (0.0310685s)]]
+[[gmp_float][30.8781 (0.287106s)][7.59969 (0.203916s)][6.51873 (0.202527s)]]
+[[mpfr_float][23.5296 (0.218779s)][8.11058 (0.217624s)][7.16325 (0.222552s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0603971s)][[*1] (0.0735485s)][[*1] (0.116464s)]]
+[[gmp_float][3.91573 (0.236498s)][2.88171 (0.211945s)][1.81075 (0.210887s)]]
+[[mpfr_float][4.90052 (0.295977s)][4.01118 (0.295017s)][2.62005 (0.305141s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0610288s)][[*1] (0.0759005s)][[*1] (0.118511s)]]
+[[gmp_float][8.26247 (0.504249s)][6.69042 (0.507806s)][4.32819 (0.51294s)]]
+[[mpfr_float][10.1593 (0.620013s)][8.45884 (0.64203s)][5.51472 (0.653557s)]]
]
[table Operator str
-[[Backend][50 Decimal Digits][100 Decimal Digits][500 Decimal Digits]]
-[[cpp_dec_float][1.4585 (0.0188303s)][1.55515 (0.03172s)][[*1] (0.131962s)]]
-[[gmp_float][[*1] (0.0129107s)][[*1] (0.0203967s)][1.04632 (0.138075s)]]
-[[mpfr_float][2.19015 (0.0282764s)][1.84679 (0.0376683s)][1.20295 (0.158743s)]]
-]
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.95848 (0.0223061s)][3.33461 (0.033471s)][3.0159 (0.132732s)]]
+[[gmp_float][[*1] (0.00753971s)][[*1] (0.0100374s)][[*1] (0.0440106s)]]
+[[mpfr_float][1.25424 (0.00945658s)][1.24943 (0.012541s)][1.09428 (0.0481601s)]]
]
+
[endsect]
[section:integer_performance Integer Algorithm Perfomance]
@@ -2820,144 +2948,222 @@
[table Operator +
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.24574 (0.0270133s)][1.09665 (0.0352319s)][1.25708 (0.0524047s)][1.31488 (0.08777s)]]
-[[cpp_int(fixed)][1.05787 (0.0229394s)][[*1] (0.0321268s)][1.16171 (0.0484289s)][1.24017 (0.0827832s)]]
-[[gmp_int][2.08016 (0.0451073s)][1.33792 (0.042983s)][1.19676 (0.0498904s)][[*1] (0.0667514s)]]
-[[tommath_int][[*1] (0.0216845s)][1.07779 (0.0346258s)][[*1] (0.0416877s)][1.06344 (0.0709863s)]]
+[[cpp_int][1.22306 (0.0279933s)][1.15878 (0.038341s)][1.24006 (0.0562258s)][1.32055 (0.0925091s)]]
+[[cpp_int(fixed)][1.56093 (0.0357264s)][1.71757 (0.05683s)][1.66497 (0.0754916s)][1.70376 (0.119354s)]]
+[[gmp_int][1.98788 (0.0454986s)][1.37882 (0.0456216s)][1.14898 (0.0520959s)][[*1] (0.0700532s)]]
+[[tommath_int][[*1] (0.022888s)][[*1] (0.0330875s)][[*1] (0.0453411s)][1.07021 (0.074972s)]]
]
[table Operator +(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.46244 (0.0202077s)][1.20665 (0.0238576s)][1.17647 (0.0258293s)][1.12424 (0.0317931s)]]
-[[cpp_int(fixed)][[*1] (0.0138178s)][[*1] (0.0197719s)][[*1] (0.0219548s)][[*1] (0.0282796s)]]
-[[gmp_int][2.15321 (0.0297527s)][2.09834 (0.041488s)][2.89935 (0.0636546s)][3.70262 (0.104709s)]]
-[[tommath_int][17.1419 (0.236864s)][12.9762 (0.256563s)][12.3275 (0.270648s)][10.7373 (0.303648s)]]
+[[cpp_int][[*1] (0.0162581s)][[*1] (0.0196602s)][[*1] (0.0305476s)][[*1] (0.0421105s)]]
+[[cpp_int(fixed)][1.3852 (0.0225207s)][1.84835 (0.036339s)][1.6111 (0.0492153s)][1.63014 (0.068646s)]]
+[[gmp_int][1.95525 (0.0317886s)][2.2217 (0.0436791s)][2.21508 (0.0676653s)][2.58759 (0.108965s)]]
+[[tommath_int][13.603 (0.221158s)][11.5797 (0.227659s)][7.86674 (0.24031s)][6.36923 (0.268212s)]]
+]
+[table Operator +(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0269712s)][[*1] (0.0296213s)][[*1] (0.0380242s)][[*1] (0.045841s)]]
+[[cpp_int(fixed)][1.38342 (0.0373126s)][1.51165 (0.0447769s)][1.54533 (0.05876s)][1.3971 (0.0640443s)]]
+[[gmp_int][26.7163 (0.72057s)][24.0631 (0.712781s)][19.6009 (0.745307s)][17.6547 (0.809308s)]]
+[[tommath_int][19.7493 (0.532664s)][18.2944 (0.541905s)][14.9127 (0.567043s)][12.9059 (0.591619s)]]
+]
+[table Operator +=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.16166 (0.020334s)][1.15312 (0.0204789s)][1.21086 (0.0216179s)][1.28088 (0.0229569s)]]
+[[cpp_int(fixed)][[*1] (0.0175043s)][[*1] (0.0177595s)][[*1] (0.0178534s)][[*1] (0.0179228s)]]
+[[gmp_int][39.0852 (0.684159s)][38.7246 (0.68773s)][38.2555 (0.68299s)][37.6736 (0.675217s)]]
+[[tommath_int][30.5872 (0.535408s)][29.371 (0.521614s)][30.3387 (0.541648s)][31.8346 (0.570565s)]]
]
[table Operator -
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.15385 (0.029665s)][1.08217 (0.0369886s)][1.05882 (0.051534s)][1.12132 (0.0822725s)]]
-[[cpp_int(fixed)][[*1] (0.0257095s)][[*1] (0.0341801s)][[*1] (0.0486711s)][1.08659 (0.0797242s)]]
-[[gmp_int][1.56685 (0.040283s)][1.32917 (0.0454312s)][1.06917 (0.0520378s)][[*1] (0.0733708s)]]
-[[tommath_int][1.059 (0.0272264s)][1.16974 (0.0399818s)][1.01303 (0.0493054s)][1.03375 (0.0758472s)]]
+[[cpp_int][1.12975 (0.0308979s)][[*1] (0.0392305s)][1.05392 (0.0543957s)][1.18166 (0.0860767s)]]
+[[cpp_int(fixed)][1.36853 (0.0374283s)][1.45987 (0.0572717s)][1.44606 (0.0746349s)][1.55935 (0.11359s)]]
+[[gmp_int][1.53173 (0.0418917s)][1.17956 (0.0462749s)][1.13609 (0.0586365s)][[*1] (0.0728442s)]]
+[[tommath_int][[*1] (0.0273493s)][1.07293 (0.0420917s)][[*1] (0.0516126s)][1.0985 (0.0800191s)]]
]
[table Operator -(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.51665 (0.0157196s)][1.31513 (0.0200533s)][1.29599 (0.0235066s)][1.21534 (0.0266136s)]]
-[[cpp_int(fixed)][[*1] (0.0103647s)][[*1] (0.0152482s)][[*1] (0.018138s)][[*1] (0.021898s)]]
-[[gmp_int][2.7938 (0.0289568s)][2.55493 (0.038958s)][3.12248 (0.0566356s)][4.48855 (0.0982904s)]]
-[[tommath_int][20.8695 (0.216305s)][15.0705 (0.229797s)][13.4093 (0.243217s)][12.2599 (0.268468s)]]
+[[cpp_int][[*1] (0.0146171s)][[*1] (0.0172176s)][[*1] (0.023655s)][[*1] (0.0313105s)]]
+[[cpp_int(fixed)][1.49086 (0.021792s)][1.94917 (0.03356s)][1.89657 (0.0448632s)][1.82658 (0.057191s)]]
+[[gmp_int][2.16301 (0.0316169s)][2.55059 (0.0439151s)][2.67983 (0.0633913s)][3.27949 (0.102682s)]]
+[[tommath_int][14.0691 (0.20565s)][12.527 (0.215684s)][9.43355 (0.22315s)][7.64671 (0.239422s)]]
+]
+[table Operator -(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0265242s)][[*1] (0.0295275s)][[*1] (0.0377737s)][[*1] (0.0450106s)]]
+[[cpp_int(fixed)][1.2627 (0.033492s)][1.47472 (0.0435449s)][1.47468 (0.055704s)][1.40667 (0.0633151s)]]
+[[gmp_int][26.0595 (0.691208s)][23.3957 (0.690817s)][18.9344 (0.715223s)][16.9593 (0.763349s)]]
+[[tommath_int][19.26 (0.510855s)][17.6236 (0.52038s)][13.9134 (0.52556s)][12.2359 (0.550746s)]]
+]
+[table Operator -=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.28589 (0.0210146s)][1.3505 (0.0222463s)][1.34427 (0.0237863s)][1.22787 (0.0230902s)]]
+[[cpp_int(fixed)][[*1] (0.0163425s)][[*1] (0.0164727s)][[*1] (0.0176946s)][[*1] (0.0188051s)]]
+[[gmp_int][41.0201 (0.670371s)][41.4726 (0.683165s)][37.9503 (0.671514s)][35.6021 (0.669502s)]]
+[[tommath_int][32.6952 (0.534322s)][31.4882 (0.518695s)][29.3988 (0.5202s)][29.1175 (0.547558s)]]
]
[table Operator *
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.29504 (0.0731032s)][1.55431 (0.196132s)][1.4363 (0.656569s)][1.63701 (2.47859s)]]
-[[cpp_int(fixed)][[*1] (0.0564485s)][1.16604 (0.147138s)][[*1] (0.457124s)][[*1] (1.5141s)]]
-[[gmp_int][1.19574 (0.0674975s)][[*1] (0.126186s)][1.16627 (0.53313s)][1.02906 (1.5581s)]]
-[[tommath_int][1.97229 (0.111333s)][2.67087 (0.337027s)][2.13031 (0.973817s)][2.05869 (3.11706s)]]
+[[cpp_int][1.13172 (0.0766099s)][1.59509 (0.20993s)][1.40998 (0.70643s)][1.70758 (2.66895s)]]
+[[cpp_int(fixed)][[*1] (0.067693s)][1.27132 (0.167319s)][[*1] (0.50102s)][[*1] (1.563s)]]
+[[gmp_int][1.01718 (0.0688559s)][[*1] (0.13161s)][1.13221 (0.567258s)][1.02292 (1.59883s)]]
+[[tommath_int][1.6793 (0.113677s)][2.66959 (0.351345s)][2.01091 (1.00751s)][2.05812 (3.21684s)]]
]
[table Operator *(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.34609 (0.030315s)][1.57086 (0.0407838s)][1.60154 (0.0542267s)][1.67808 (0.0804984s)]]
-[[cpp_int(fixed)][1.29783 (0.0292279s)][1.58263 (0.0410894s)][1.61543 (0.054697s)][1.66841 (0.0800346s)]]
-[[gmp_int][[*1] (0.0225207s)][[*1] (0.0259628s)][[*1] (0.033859s)][[*1] (0.0479706s)]]
-[[tommath_int][12.4278 (0.279882s)][11.9045 (0.309074s)][10.5973 (0.358813s)][9.47384 (0.454466s)]]
+[[cpp_int][[*1] (0.0228822s)][1.19988 (0.0332404s)][1.13882 (0.0416226s)][1.2711 (0.0665655s)]]
+[[cpp_int(fixed)][1.33157 (0.0304692s)][1.6546 (0.0458376s)][1.72684 (0.063114s)][1.83178 (0.0959269s)]]
+[[gmp_int][1.00858 (0.0230786s)][[*1] (0.0277032s)][[*1] (0.0365488s)][[*1] (0.0523682s)]]
+[[tommath_int][10.8491 (0.248252s)][9.88511 (0.273849s)][8.95509 (0.327298s)][8.04172 (0.421131s)]]
+]
+[table Operator *(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0574926s)][[*1] (0.0876613s)][[*1] (0.146194s)][[*1] (0.258556s)]]
+[[cpp_int(fixed)][1.12247 (0.0645337s)][1.24471 (0.109113s)][1.19748 (0.175065s)][1.17442 (0.303653s)]]
+[[gmp_int][12.271 (0.705488s)][8.23054 (0.7215s)][5.28668 (0.772883s)][3.09816 (0.801047s)]]
+[[tommath_int][10.2751 (0.590743s)][7.36707 (0.645807s)][4.88979 (0.71486s)][3.43724 (0.888719s)]]
+]
+[table Operator *=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][114.922 (7.57662s)][70.5882 (7.61458s)][44.3157 (7.67791s)][26.2881 (7.81595s)]]
+[[cpp_int(fixed)][[*1] (0.0659286s)][[*1] (0.107873s)][[*1] (0.173255s)][[*1] (0.297319s)]]
+[[gmp_int][47.9828 (3.16344s)][29.4972 (3.18196s)][18.1719 (3.14838s)][10.6941 (3.17956s)]]
+[[tommath_int][284.199 (18.7368s)][173.129 (18.676s)][109.052 (18.8938s)][64.5866 (19.2028s)]]
]
[table Operator /
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][2.86387 (0.593314s)][2.18375 (0.69965s)][1.72571 (0.918294s)][1.39251 (1.33801s)]]
-[[cpp_int(fixed)][[*1] (0.207172s)][[*1] (0.320389s)][[*1] (0.532127s)][[*1] (0.960856s)]]
-[[gmp_int][3.89115 (0.806137s)][2.87573 (0.921352s)][1.96635 (1.04635s)][1.29618 (1.24544s)]]
-[[tommath_int][11.9483 (2.47535s)][9.35941 (2.99865s)][8.79014 (4.67747s)][11.8316 (11.3684s)]]
+[[cpp_int][2.71618 (0.616086s)][2.09988 (0.737246s)][1.65898 (0.94343s)][1.49441 (1.44418s)]]
+[[cpp_int(fixed)][[*1] (0.226821s)][[*1] (0.35109s)][[*1] (0.56868s)][[*1] (0.966385s)]]
+[[gmp_int][3.82134 (0.866761s)][2.75998 (0.969001s)][1.93226 (1.09884s)][1.34132 (1.29623s)]]
+[[tommath_int][13.2978 (3.01622s)][11.3314 (3.97833s)][9.94138 (5.65347s)][13.3423 (12.8938s)]]
]
[table Operator /(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][5.77003 (0.313196s)][4.38067 (0.431864s)][3.55054 (0.634559s)][2.97898 (1.03205s)]]
-[[cpp_int(fixed)][2.48952 (0.135131s)][2.59188 (0.255519s)][2.56716 (0.458808s)][2.52368 (0.874313s)]]
-[[gmp_int][[*1] (0.0542797s)][[*1] (0.0985842s)][[*1] (0.178722s)][[*1] (0.346443s)]]
-[[tommath_int][31.6477 (1.71783s)][22.8727 (2.25489s)][19.9248 (3.56101s)][24.3266 (8.42779s)]]
+[[cpp_int][4.15094 (0.23911s)][3.57962 (0.356615s)][3.11624 (0.578256s)][2.82967 (1.00414s)]]
+[[cpp_int(fixed)][2.42806 (0.139865s)][2.54164 (0.253208s)][2.43025 (0.450962s)][2.37209 (0.841768s)]]
+[[gmp_int][[*1] (0.0576038s)][[*1] (0.0996238s)][[*1] (0.185562s)][[*1] (0.354863s)]]
+[[tommath_int][36.3133 (2.09179s)][28.2731 (2.81668s)][21.8589 (4.05618s)][25.8061 (9.15762s)]]
+]
+[table Operator /(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.53953 (0.716927s)][1.40156 (1.65075s)][2.59584 (3.57744s)][4.58524 (8.3789s)]]
+[[cpp_int(fixed)][[*1] (0.465679s)][1.09556 (1.29034s)][2.2858 (3.15016s)][4.40115 (8.0425s)]]
+[[gmp_int][2.25405 (1.04967s)][[*1] (1.17779s)][[*1] (1.37814s)][[*1] (1.82736s)]]
+[[tommath_int][5.03884 (2.34648s)][2.63459 (3.103s)][3.67287 (5.06174s)][6.77479 (12.38s)]]
+]
+[table Operator /=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.78744 (0.0586752s)][1.74065 (0.0616578s)][1.66814 (0.0740436s)][1.36231 (0.126362s)]]
+[[cpp_int(fixed)][[*1] (0.0328264s)][[*1] (0.0354222s)][[*1] (0.0443871s)][[*1] (0.0927553s)]]
+[[gmp_int][21.2392 (0.697207s)][19.3517 (0.68548s)][15.2936 (0.678837s)][7.37138 (0.683734s)]]
+[[tommath_int][32.8142 (1.07717s)][30.5556 (1.08235s)][24.7236 (1.09741s)][12.4072 (1.15084s)]]
]
[table Operator %
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.9813 (0.357541s)][1.55667 (0.460146s)][1.35341 (0.681144s)][1.19906 (1.10138s)]]
-[[cpp_int(fixed)][[*1] (0.180457s)][[*1] (0.295597s)][[*1] (0.503278s)][[*1] (0.918538s)]]
-[[gmp_int][3.50213 (0.631985s)][2.33312 (0.689662s)][1.57264 (0.791475s)][1.07795 (0.99014s)]]
-[[tommath_int][12.2393 (2.20868s)][10.1123 (2.98915s)][9.46676 (4.76442s)][12.1795 (11.1873s)]]
+[[cpp_int][1.86833 (0.37472s)][1.43076 (0.491332s)][1.30757 (0.708055s)][1.2528 (1.15842s)]]
+[[cpp_int(fixed)][[*1] (0.200565s)][[*1] (0.343407s)][[*1] (0.541503s)][[*1] (0.924662s)]]
+[[gmp_int][3.22603 (0.647027s)][2.08249 (0.715143s)][1.5148 (0.82027s)][1.09519 (1.01268s)]]
+[[tommath_int][15.4642 (3.10158s)][11.5534 (3.9675s)][10.5164 (5.69467s)][13.8962 (12.8493s)]]
]
[table Operator %(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.88485 (0.105552s)][2.00194 (0.203711s)][2.08202 (0.380096s)][2.12794 (0.752068s)]]
-[[cpp_int(fixed)][1.7474 (0.0978544s)][1.88457 (0.191768s)][2.0306 (0.37071s)][2.0851 (0.736929s)]]
-[[gmp_int][[*1] (0.0560001s)][[*1] (0.101757s)][[*1] (0.182561s)][[*1] (0.353426s)]]
-[[tommath_int][30.4466 (1.70501s)][22.2997 (2.26915s)][19.6199 (3.58184s)][24.0694 (8.50676s)]]
+[[cpp_int][1.80079 (0.106617s)][1.96413 (0.207216s)][2.09096 (0.395682s)][2.14767 (0.776873s)]]
+[[cpp_int(fixed)][1.73532 (0.10274s)][1.92036 (0.202599s)][2.02172 (0.382579s)][2.07328 (0.749963s)]]
+[[gmp_int][[*1] (0.0592053s)][[*1] (0.1055s)][[*1] (0.189234s)][[*1] (0.361727s)]]
+[[tommath_int][35.6993 (2.11359s)][25.3086 (2.67007s)][21.2701 (4.02504s)][25.8662 (9.3565s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.17135 (0.00274853s)][[*1] (0.00275161s)][[*1] (0.00275161s)][[*1] (0.00344359s)]]
+[[cpp_int(fixed)][[*1] (0.00234646s)][1.54518 (0.00425173s)][2.2494 (0.00618947s)][1.73247 (0.00596591s)]]
+[[gmp_int][85.6802 (0.201045s)][72.6635 (0.199941s)][78.1286 (0.214979s)][58.3553 (0.200952s)]]
+[[tommath_int][87.9831 (0.206449s)][74.8522 (0.205964s)][74.8918 (0.206073s)][63.4572 (0.218521s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.43934 (0.00268554s)][[*1] (0.00286887s)][[*1] (0.00283465s)][[*1] (0.00290638s)]]
+[[cpp_int(fixed)][[*1] (0.00186581s)][1.7597 (0.00504834s)][2.07419 (0.00587959s)][1.89871 (0.00551837s)]]
+[[gmp_int][125.861 (0.234832s)][72.7068 (0.208586s)][75.5147 (0.214058s)][71.2679 (0.207131s)]]
+[[tommath_int][240.568 (0.448854s)][155.552 (0.446257s)][157.598 (0.446734s)][160.728 (0.467137s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.3528 (0.00771495s)][1.61678 (0.00717424s)][1.12087 (0.00715985s)][1.2104 (0.0078878s)]]
+[[cpp_int(fixed)][[*1] (0.00327905s)][[*1] (0.00443737s)][[*1] (0.00638775s)][[*1] (0.00651668s)]]
+[[gmp_int][222.775 (0.730489s)][165.447 (0.734148s)][114.708 (0.732725s)][112.162 (0.730926s)]]
+[[tommath_int][215.962 (0.70815s)][157.945 (0.700858s)][109.582 (0.699985s)][111.909 (0.729275s)]]
]
-[table Operator <<
+[table Operator str
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.20362 (0.0224696s)][1.08555 (0.0294403s)][[*1] (0.0360516s)][1.07177 (0.0523935s)]]
-[[cpp_int(fixed)][[*1] (0.0186683s)][[*1] (0.0271201s)][1.02126 (0.036818s)][[*1] (0.0488848s)]]
-[[gmp_int][1.36706 (0.0255207s)][1.12042 (0.0303858s)][1.24359 (0.0448335s)][1.40143 (0.0685085s)]]
-[[tommath_int][2.09357 (0.0390833s)][2.4569 (0.0666312s)][2.63592 (0.0950291s)][3.43638 (0.167987s)]]
+[[cpp_int][1.46938 (0.00196575s)][1.37205 (0.00331355s)][1.5689 (0.00862952s)][1.57176 (0.0237239s)]]
+[[cpp_int(fixed)][[*1] (0.00133781s)][[*1] (0.00241504s)][[*1] (0.00550035s)][1.20619 (0.0182059s)]]
+[[gmp_int][1.65482 (0.00221383s)][1.38972 (0.00335622s)][1.13845 (0.0062619s)][[*1] (0.0150938s)]]
+[[tommath_int][13.9845 (0.0187087s)][18.3179 (0.0442384s)][23.3489 (0.128427s)][25.3273 (0.382285s)]]
]
-[table Operator >>
+[table Operator gcd
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.33649 (0.0210319s)][1.12919 (0.0266135s)][1.10413 (0.0307184s)][1.09267 (0.0399373s)]]
-[[cpp_int(fixed)][[*1] (0.0157367s)][[*1] (0.0235686s)][[*1] (0.0278214s)][1.05198 (0.0384501s)]]
-[[gmp_int][1.72135 (0.0270884s)][1.2078 (0.0284661s)][1.16066 (0.0322912s)][[*1] (0.0365503s)]]
-[[tommath_int][15.4381 (0.242945s)][11.8797 (0.279987s)][10.9043 (0.303374s)][14.0762 (0.514491s)]]
+[[cpp_int][2.03241 (5.06795s)][1.89904 (11.3002s)][1.99735 (27.4027s)][2.20708 (73.7574s)]]
+[[cpp_int(fixed)][1.67874 (4.18605s)][1.70044 (10.1184s)][1.96475 (26.9554s)][2.28347 (76.31s)]]
+[[gmp_int][[*1] (2.49357s)][[*1] (5.95047s)][[*1] (13.7195s)][[*1] (33.4185s)]]
+[[tommath_int][5.01832 (12.5135s)][4.41659 (26.2808s)][4.08042 (55.9814s)][3.97901 (132.972s)]]
]
[table Operator &
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.65829 (0.0314059s)][1.42198 (0.0390384s)][1.48578 (0.0498903s)][1.51243 (0.0770342s)]]
-[[cpp_int(fixed)][[*1] (0.0189387s)][[*1] (0.0274536s)][[*1] (0.0335786s)][[*1] (0.0509341s)]]
-[[gmp_int][2.80248 (0.0530755s)][2.39752 (0.0658206s)][2.66009 (0.089322s)][2.73942 (0.13953s)]]
-[[tommath_int][6.95432 (0.131706s)][5.4059 (0.148412s)][4.56887 (0.153417s)][6.5696 (0.334616s)]]
+[[cpp_int][1.00344 (0.0315529s)][[*1] (0.0426295s)][[*1] (0.0543214s)][1.06624 (0.0835064s)]]
+[[cpp_int(fixed)][[*1] (0.0314446s)][1.0808 (0.046074s)][1.06116 (0.0576436s)][[*1] (0.0783186s)]]
+[[gmp_int][1.78372 (0.0560885s)][1.58661 (0.0676363s)][1.5738 (0.0854908s)][1.83409 (0.143644s)]]
+[[tommath_int][4.08054 (0.128311s)][3.50852 (0.149567s)][2.88826 (0.156894s)][4.45879 (0.349206s)]]
]
[table Operator &(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.63285 (0.0472296s)][1.43344 (0.0588492s)][1.33141 (0.0724386s)][1.21353 (0.104144s)]]
-[[cpp_int(fixed)][[*1] (0.0289247s)][[*1] (0.0410546s)][[*1] (0.0544075s)][[*1] (0.0858187s)]]
-[[gmp_int][5.24478 (0.151704s)][3.81907 (0.15679s)][2.77979 (0.151242s)][1.84209 (0.158086s)]]
-[[tommath_int][11.7257 (0.339163s)][8.6379 (0.354625s)][6.90411 (0.375636s)][7.63253 (0.655013s)]]
+[[cpp_int][[*1] (0.0367605s)][[*1] (0.0485394s)][[*1] (0.0650023s)][[*1] (0.099751s)]]
+[[cpp_int(fixed)][1.00324 (0.0368795s)][1.06734 (0.0518081s)][1.05192 (0.0683771s)][1.05296 (0.105034s)]]
+[[gmp_int][4.00058 (0.147063s)][3.02928 (0.147039s)][2.22221 (0.144449s)][1.45749 (0.145386s)]]
+[[tommath_int][8.83732 (0.324864s)][6.95191 (0.337442s)][5.42556 (0.352674s)][6.10829 (0.609309s)]]
]
-[table Operator ^
+[table Operator |
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.39325 (0.0297525s)][1.28821 (0.0385005s)][1.18843 (0.0492426s)][1.07724 (0.0758668s)]]
-[[cpp_int(fixed)][[*1] (0.0213547s)][[*1] (0.0298868s)][[*1] (0.041435s)][[*1] (0.070427s)]]
-[[gmp_int][2.28582 (0.048813s)][2.03478 (0.0608129s)][2.05655 (0.0852131s)][1.92381 (0.135488s)]]
-[[tommath_int][6.17078 (0.131775s)][4.8567 (0.145151s)][3.64659 (0.151097s)][4.78192 (0.336776s)]]
+[[cpp_int][[*1] (0.0312723s)][[*1] (0.0428385s)][[*1] (0.0528083s)][[*1] (0.0827344s)]]
+[[cpp_int(fixed)][1.0311 (0.0322449s)][1.20267 (0.0515207s)][1.27028 (0.0670814s)][1.19432 (0.0988112s)]]
+[[gmp_int][1.55273 (0.0485576s)][1.4656 (0.0627839s)][1.66721 (0.0880424s)][1.67004 (0.13817s)]]
+[[tommath_int][4.15311 (0.129877s)][3.39008 (0.145226s)][2.88739 (0.152478s)][4.20575 (0.34796s)]]
]
-[table Operator ^(int)
+[table Operator |(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.89396 (0.0383127s)][1.64269 (0.043417s)][1.5386 (0.0477162s)][1.32247 (0.0568053s)]]
-[[cpp_int(fixed)][[*1] (0.0202288s)][[*1] (0.0264305s)][[*1] (0.0310128s)][[*1] (0.0429539s)]]
-[[gmp_int][7.01953 (0.141997s)][5.47513 (0.14471s)][4.6627 (0.144603s)][3.59601 (0.154463s)]]
-[[tommath_int][16.2706 (0.329134s)][12.9494 (0.342258s)][11.3305 (0.35139s)][14.1712 (0.608709s)]]
+[[cpp_int][1.01685 (0.030066s)][[*1] (0.0360965s)][[*1] (0.0402109s)][[*1] (0.0527074s)]]
+[[cpp_int(fixed)][[*1] (0.0295677s)][1.50234 (0.0542292s)][1.52609 (0.0613656s)][1.37526 (0.0724863s)]]
+[[gmp_int][4.84414 (0.14323s)][3.99297 (0.144132s)][3.85375 (0.154963s)][2.91129 (0.153447s)]]
+[[tommath_int][10.8218 (0.319975s)][9.05203 (0.326747s)][8.32597 (0.334795s)][10.948 (0.577039s)]]
]
-[table Operator |
+[table Operator ^
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.34742 (0.0296944s)][1.25923 (0.0384846s)][1.20517 (0.0493908s)][1.10536 (0.0761343s)]]
-[[cpp_int(fixed)][[*1] (0.0220379s)][[*1] (0.030562s)][[*1] (0.0409823s)][[*1] (0.0688775s)]]
-[[gmp_int][2.14429 (0.0472558s)][1.95901 (0.0598712s)][2.07584 (0.0850728s)][1.94265 (0.133805s)]]
-[[tommath_int][5.98286 (0.13185s)][4.65705 (0.142329s)][3.85812 (0.158115s)][4.81524 (0.331662s)]]
+[[cpp_int][[*1] (0.0311003s)][[*1] (0.0430909s)][[*1] (0.0530915s)][[*1] (0.0842599s)]]
+[[cpp_int(fixed)][1.04721 (0.0325686s)][1.18557 (0.0510874s)][1.25714 (0.0667433s)][1.14462 (0.0964459s)]]
+[[gmp_int][1.59277 (0.0495356s)][1.47967 (0.0637601s)][1.73243 (0.0919772s)][1.68499 (0.141977s)]]
+[[tommath_int][4.17425 (0.12982s)][3.41013 (0.146946s)][2.8988 (0.153902s)][4.17074 (0.351426s)]]
]
-[table Operator |(int)
+[table Operator ^(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.40808 (0.0389721s)][1.65035 (0.0437872s)][1.51667 (0.0466144s)][1.37806 (0.0582842s)]]
-[[cpp_int(fixed)][[*1] (0.0276775s)][[*1] (0.026532s)][[*1] (0.0307348s)][[*1] (0.0422945s)]]
-[[gmp_int][5.31451 (0.147092s)][5.37333 (0.142565s)][4.86508 (0.149527s)][3.74364 (0.158335s)]]
-[[tommath_int][11.9312 (0.330226s)][12.943 (0.343403s)][11.4457 (0.35178s)][14.4462 (0.610997s)]]
+[[cpp_int][[*1] (0.0290428s)][[*1] (0.0360261s)][[*1] (0.0409722s)][[*1] (0.0541785s)]]
+[[cpp_int(fixed)][1.01484 (0.0294736s)][1.4898 (0.0536716s)][1.34782 (0.0552234s)][1.35054 (0.0731703s)]]
+[[gmp_int][4.94574 (0.143638s)][4.05569 (0.146111s)][3.65257 (0.149654s)][2.89039 (0.156597s)]]
+[[tommath_int][10.8939 (0.316389s)][9.21322 (0.331916s)][8.17995 (0.335151s)][10.6902 (0.579178s)]]
]
-[table Operator gcd
+[table Operator <<
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.82514 (4.45586s)][1.75955 (10.1748s)][1.87025 (25.23s)][2.11453 (68.8556s)]]
-[[cpp_int(fixed)][1.57965 (3.85654s)][1.67404 (9.68027s)][1.8405 (24.8287s)][2.27588 (74.1096s)]]
-[[gmp_int][[*1] (2.44138s)][[*1] (5.78259s)][[*1] (13.4902s)][[*1] (32.5631s)]]
-[[tommath_int][5.01357 (12.24s)][4.38161 (25.337s)][4.08681 (55.1319s)][4.01045 (130.593s)]]
+[[cpp_int][[*1] (0.0253777s)][1.04239 (0.034484s)][[*1] (0.0420979s)][[*1] (0.0623485s)]]
+[[cpp_int(fixed)][1.05039 (0.0266563s)][1.40679 (0.0465388s)][1.34077 (0.0564434s)][1.20319 (0.0750171s)]]
+[[gmp_int][1.0359 (0.0262888s)][[*1] (0.0330815s)][1.1625 (0.0489388s)][1.16511 (0.0726428s)]]
+[[tommath_int][1.65904 (0.0421025s)][2.11201 (0.0698686s)][2.36727 (0.0996572s)][2.701 (0.168403s)]]
]
-[table Operator str
+[table Operator >>
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.46421 (0.00195137s)][1.21669 (0.00319216s)][1.25041 (0.00765237s)][1.53339 (0.0218096s)]]
-[[cpp_int(fixed)][[*1] (0.00133271s)][[*1] (0.00262366s)][1.0109 (0.00618661s)][1.24429 (0.0176978s)]]
-[[gmp_int][1.7777 (0.00236916s)][1.27408 (0.00334274s)][[*1] (0.00611991s)][[*1] (0.0142232s)]]
-[[tommath_int][11.9797 (0.0159654s)][18.3349 (0.0481046s)][18.3681 (0.112411s)][25.0355 (0.356085s)]]
+[[cpp_int][[*1] (0.0221035s)][1.0337 (0.0313761s)][1.03419 (0.0355718s)][1.20366 (0.0453508s)]]
+[[cpp_int(fixed)][1.1036 (0.0243933s)][1.12323 (0.0340936s)][1.40181 (0.0482162s)][1.69985 (0.0640463s)]]
+[[gmp_int][1.30456 (0.0288354s)][[*1] (0.0303532s)][[*1] (0.0343958s)][[*1] (0.0376776s)]]
+[[tommath_int][10.5766 (0.233779s)][9.0959 (0.27609s)][8.6249 (0.29666s)][13.6818 (0.515498s)]]
]
+
[endsect]
[section:rational_performance Rational Type Perfomance]
@@ -2975,49 +3181,105 @@
[table Operator +
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.91758 (18.1263s)][6.60754 (44.1182s)][6.65334 (103.169s)][6.44717 (244.055s)]]
-[[mpq_rational][[*1] (3.06312s)][[*1] (6.67695s)][[*1] (15.5064s)][[*1] (37.8546s)]]
+[[cpp_rational][5.89417 (18.4116s)][6.87256 (47.4698s)][6.65008 (107.715s)][6.53801 (256.244s)]]
+[[mpq_rational][[*1] (3.1237s)][[*1] (6.90715s)][[*1] (16.1975s)][[*1] (39.1929s)]]
]
[table Operator +(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][3.98512 (2.67249s)][4.24335 (3.04309s)][4.65009 (3.83046s)][5.45832 (5.08346s)]]
-[[mpq_rational][[*1] (0.670618s)][[*1] (0.717144s)][[*1] (0.823739s)][[*1] (0.931322s)]]
+[[cpp_rational][3.62367 (2.46488s)][4.18291 (2.94603s)][4.726 (3.74866s)][6.1388 (5.56817s)]]
+[[mpq_rational][[*1] (0.680215s)][[*1] (0.704303s)][[*1] (0.7932s)][[*1] (0.907046s)]]
+]
+[table Operator +(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.1527 (2.6378s)][1.31751 (3.09863s)][1.58996 (4.00714s)][2.15642 (5.75702s)]]
+[[mpq_rational][[*1] (2.28837s)][[*1] (2.35189s)][[*1] (2.52028s)][[*1] (2.66971s)]]
+]
+[table Operator +=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.18436 (2.7059s)][1.32279 (3.11099s)][1.61398 (4.05389s)][2.20048 (5.84623s)]]
+[[mpq_rational][[*1] (2.2847s)][[*1] (2.35183s)][[*1] (2.51174s)][[*1] (2.6568s)]]
]
[table Operator -
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.91504 (18.2374s)][6.55676 (43.8659s)][6.66239 (103.481s)][6.47224 (244.887s)]]
-[[mpq_rational][[*1] (3.08322s)][[*1] (6.69018s)][[*1] (15.5321s)][[*1] (37.8365s)]]
+[[cpp_rational][5.81893 (18.3457s)][6.82209 (47.1928s)][6.64143 (107.498s)][6.51362 (255.137s)]]
+[[mpq_rational][[*1] (3.15277s)][[*1] (6.91765s)][[*1] (16.1859s)][[*1] (39.1698s)]]
]
[table Operator -(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][3.96173 (2.66785s)][4.36532 (3.09023s)][4.59363 (3.74494s)][5.43075 (5.09156s)]]
-[[mpq_rational][[*1] (0.673405s)][[*1] (0.707904s)][[*1] (0.815246s)][[*1] (0.937541s)]]
+[[cpp_rational][3.72441 (2.48756s)][4.27663 (2.98713s)][4.62109 (3.72114s)][6.17605 (5.56503s)]]
+[[mpq_rational][[*1] (0.667908s)][[*1] (0.698479s)][[*1] (0.805252s)][[*1] (0.901066s)]]
+]
+[table Operator -(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.15627 (2.63239s)][1.32096 (3.12092s)][1.61044 (4.00106s)][2.19378 (5.7644s)]]
+[[mpq_rational][[*1] (2.27663s)][[*1] (2.36262s)][[*1] (2.48445s)][[*1] (2.62761s)]]
+]
+[table Operator -=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.1984 (2.73444s)][1.34141 (3.15698s)][1.64159 (4.06997s)][2.23017 (5.88108s)]]
+[[mpq_rational][[*1] (2.28174s)][[*1] (2.35348s)][[*1] (2.47929s)][[*1] (2.63706s)]]
]
[table Operator *
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.59286 (32.3559s)][6.54125 (82.4247s)][6.8815 (197.198s)][6.84066 (473.057s)]]
-[[mpq_rational][[*1] (5.78521s)][[*1] (12.6008s)][[*1] (28.6562s)][[*1] (69.1537s)]]
+[[cpp_rational][5.4306 (32.5882s)][6.91805 (89.9436s)][6.94556 (207.307s)][6.88704 (492.151s)]]
+[[mpq_rational][[*1] (6.00084s)][[*1] (13.0013s)][[*1] (29.8475s)][[*1] (71.4604s)]]
]
[table Operator *(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][2.70193 (3.1466s)][3.10134 (3.79056s)][3.659 (4.93935s)][4.61372 (6.89845s)]]
-[[mpq_rational][[*1] (1.16457s)][[*1] (1.22223s)][[*1] (1.34992s)][[*1] (1.4952s)]]
+[[cpp_rational][2.12892 (2.51376s)][2.47245 (3.07841s)][2.86832 (3.93619s)][3.94086 (6.02565s)]]
+[[mpq_rational][[*1] (1.18077s)][[*1] (1.24508s)][[*1] (1.3723s)][[*1] (1.52902s)]]
+]
+[table Operator *(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.32254 (5.43565s)][1.56078 (6.73163s)][1.97701 (9.32522s)][2.85404 (15.1573s)]]
+[[mpq_rational][[*1] (4.11002s)][[*1] (4.313s)][[*1] (4.71682s)][[*1] (5.31082s)]]
+]
+[table Operator *=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][6.29806 (58.1188s)][6.30556 (59.5076s)][6.3385 (62.1007s)][6.55345 (67.6905s)]]
+[[mpq_rational][[*1] (9.22804s)][[*1] (9.43733s)][[*1] (9.79739s)][[*1] (10.329s)]]
]
[table Operator /
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][4.36846 (63.9498s)][5.52565 (145.045s)][6.18331 (328.069s)][6.49822 (784.806s)]]
-[[mpq_rational][[*1] (14.639s)][[*1] (26.2494s)][[*1] (53.0571s)][[*1] (120.772s)]]
+[[cpp_rational][4.4269 (66.8031s)][6.40103 (173.527s)][6.32347 (348.193s)][6.61148 (824.063s)]]
+[[mpq_rational][[*1] (15.0903s)][[*1] (27.1093s)][[*1] (55.0637s)][[*1] (124.641s)]]
]
[table Operator /(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][2.26643 (3.13785s)][2.57125 (3.76931s)][3.20872 (5.06758s)][4.02177 (7.17803s)]]
-[[mpq_rational][[*1] (1.38449s)][[*1] (1.46594s)][[*1] (1.57931s)][[*1] (1.78479s)]]
+[[cpp_rational][1.78772 (2.50984s)][2.10623 (3.10606s)][2.46986 (3.99358s)][3.37428 (5.96678s)]]
+[[mpq_rational][[*1] (1.40393s)][[*1] (1.4747s)][[*1] (1.61693s)][[*1] (1.76831s)]]
+]
+[table Operator /(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.29695 (5.45454s)][1.55248 (6.85353s)][1.93237 (9.28765s)][2.75211 (14.8541s)]]
+[[mpq_rational][[*1] (4.20568s)][[*1] (4.41458s)][[*1] (4.80635s)][[*1] (5.39734s)]]
+]
+[table Operator /=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][6.19401 (58.4278s)][6.20135 (59.643s)][6.21327 (62.0338s)][6.40576 (67.6778s)]]
+[[mpq_rational][[*1] (9.43295s)][[*1] (9.61774s)][[*1] (9.98407s)][[*1] (10.5652s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.00978288s)][[*1] (0.0100574s)][[*1] (0.0101393s)][[*1] (0.0101847s)]]
+[[mpq_rational][39.1516 (0.383015s)][38.3523 (0.385725s)][37.5812 (0.381048s)][37.6007 (0.382953s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0548151s)][[*1] (0.0557542s)][[*1] (0.055825s)][[*1] (0.0552808s)]]
+[[mpq_rational][7.21073 (0.395257s)][7.1016 (0.395944s)][7.02046 (0.391917s)][7.16881 (0.396297s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0605156s)][[*1] (0.0616657s)][[*1] (0.0592056s)][[*1] (0.0603081s)]]
+[[mpq_rational][35.1604 (2.12775s)][34.7575 (2.14335s)][35.7232 (2.11502s)][35.0437 (2.11342s)]]
]
[table Operator str
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.40493 (0.0199393s)][8.55089 (0.0511907s)][9.91026 (0.118839s)][9.93546 (0.285367s)]]
-[[mpq_rational][[*1] (0.00368909s)][[*1] (0.00598659s)][[*1] (0.0119915s)][[*1] (0.028722s)]]
+[[cpp_rational][5.48898 (0.0208949s)][8.49668 (0.0546688s)][10.107 (0.121897s)][10.5339 (0.310584s)]]
+[[mpq_rational][[*1] (0.0038067s)][[*1] (0.00643413s)][[*1] (0.0120606s)][[*1] (0.0294843s)]]
]
+
[endsect]
[endsect]
Modified: sandbox/big_number/libs/multiprecision/performance/arithmetic_backend.hpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/performance/arithmetic_backend.hpp (original)
+++ sandbox/big_number/libs/multiprecision/performance/arithmetic_backend.hpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -39,6 +39,8 @@
}
template <class A>
arithmetic_backend(const A& o, const typename enable_if<is_arithmetic<A> >::type* = 0) : m_value(o) {}
+ template <class A>
+ arithmetic_backend(const arithmetic_backend<A>& o) : m_value(o.data()) {}
arithmetic_backend& operator = (const arithmetic_backend& o)
{
m_value = o.m_value;
@@ -50,6 +52,12 @@
m_value = i;
return *this;
}
+ template <class A>
+ arithmetic_backend& operator = (const arithmetic_backend<A>& i)
+ {
+ m_value = i.data();
+ return *this;
+ }
arithmetic_backend& operator = (const char* s)
{
try
@@ -507,6 +515,21 @@
template <class Arithmetic>
struct number_category<arithmetic_backend<Arithmetic> > : public mpl::int_<is_integral<Arithmetic>::value ? number_kind_integer : number_kind_floating_point>{};
+namespace detail{
+
+template<class Arithmetic, boost::multiprecision::expression_template_option ET>
+struct double_precision_type<number<arithmetic_backend<Arithmetic>, ET> >
+{
+ typedef number<arithmetic_backend<typename double_precision_type<Arithmetic>::type>, ET> type;
+};
+template<>
+struct double_precision_type<arithmetic_backend<boost::int32_t> >
+{
+ typedef arithmetic_backend<boost::int64_t> type;
+};
+
+}
+
}} // namespaces
namespace boost{ namespace math{ namespace tools{
Modified: sandbox/big_number/libs/multiprecision/performance/miller_rabin_performance.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/performance/miller_rabin_performance.cpp (original)
+++ sandbox/big_number/libs/multiprecision/performance/miller_rabin_performance.cpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -68,6 +68,7 @@
return (*realloc_func_ptr)(p, old, n);
}
+#ifdef TEST_MPZ
boost::chrono::duration<double> test_miller_rabin_gmp()
{
using namespace boost::random;
@@ -84,6 +85,7 @@
}
return c.elapsed();
}
+#endif
std::map<std::string, double> results;
double min_time = (std::numeric_limits<double>::max)();
@@ -101,11 +103,13 @@
// we get false positives.
//
mt19937 gen2;
+ unsigned result_count = 0;
for(unsigned i = 0; i < 1000; ++i)
{
IntType n = gen();
- miller_rabin_test(n, 25, gen2);
+ if(boost::multiprecision::miller_rabin_test(n, 25, gen2))
+ ++result_count;
}
boost::chrono::duration<double> t = c.elapsed();
double d = t.count();
@@ -113,12 +117,13 @@
min_time = d;
results[name] = d;
std::cout << "Time for " << std::setw(30) << std::left << name << " = " << d << std::endl;
+ std::cout << "Number of primes found = " << result_count << std::endl;
return t;
}
void generate_quickbook()
{
- std::cout << "[table\n";
+ std::cout << "[table\n[[Integer Type][Relative Performance (Actual time in parenthesis)]]\n";
std::map<std::string, double>::const_iterator i(results.begin()), j(results.end());
@@ -143,6 +148,7 @@
test_miller_rabin<number<cpp_int_backend<512> > >("cpp_int (512-bit cache)");
test_miller_rabin<number<cpp_int_backend<1024> > >("cpp_int (1024-bit cache)");
test_miller_rabin<int1024_t>("int1024_t");
+ test_miller_rabin<checked_int1024_t>("checked_int1024_t");
#endif
#ifdef TEST_MPZ
test_miller_rabin<number<gmp_int, et_off> >("mpz_int (no Expression templates)");
@@ -153,8 +159,6 @@
test_miller_rabin<number<boost::multiprecision::tommath_int, et_off> >("tom_int (no Expression templates)");
test_miller_rabin<boost::multiprecision::tom_int>("tom_int");
#endif
- mp_get_memory_functions(&alloc_func_ptr, &realloc_func_ptr, &free_func_ptr);
- mp_set_memory_functions(&alloc_func, &realloc_func, &free_func);
generate_quickbook();
Modified: sandbox/big_number/libs/multiprecision/performance/performance_test-msvc-10.log
==============================================================================
--- sandbox/big_number/libs/multiprecision/performance/performance_test-msvc-10.log (original)
+++ sandbox/big_number/libs/multiprecision/performance/performance_test-msvc-10.log 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -1,718 +1,1220 @@
-gmp_float 50 + 0.111016
-gmp_float 50 - 0.119562
-gmp_float 50 * 0.266947
-gmp_float 50 / 1.23608
-gmp_float 50 str 0.0299824
-gmp_float 50 +(int)0.0320709
-gmp_float 50 -(int)0.130453
-gmp_float 50 *(int)0.0391224
-gmp_float 50 /(int)0.178268
-gmp_float 100 + 0.108884
-gmp_float 100 - 0.118595
-gmp_float 100 * 0.401792
-gmp_float 100 / 1.60879
-gmp_float 100 str 0.0207461
-gmp_float 100 +(int)0.0346436
-gmp_float 100 -(int)0.131897
-gmp_float 100 *(int)0.0435089
-gmp_float 100 /(int)0.23715
-gmp_float 500 + 0.143065
-gmp_float 500 - 0.151427
-gmp_float 500 * 3.22591
-gmp_float 500 / 8.09281
-gmp_float 500 str 0.136249
-gmp_float 500 +(int)0.0567182
-gmp_float 500 -(int)0.164247
-gmp_float 500 *(int)0.0824826
-gmp_float 500 /(int)0.693418
-gmp_int 128 + 0.0416325
-gmp_int 128 - 0.0409536
-gmp_int 128 * 0.0673622
-gmp_int 128 / 0.8304
-gmp_int 128 str 0.00202218
-gmp_int 128 +(int)0.0297328
-gmp_int 128 -(int)0.0296573
-gmp_int 128 *(int)0.0225369
-gmp_int 128 /(int)0.0545672
-gmp_int 128 % 0.626244
-gmp_int 128 | 0.0491246
-gmp_int 128 & 0.0530007
-gmp_int 128 ^ 0.0485553
-gmp_int 128 << 0.0260055
-gmp_int 128 >> 0.0275053
-gmp_int 128 %(int)0.0553103
-gmp_int 128 |(int)0.14092
-gmp_int 128 &(int)0.146717
-gmp_int 128 ^(int)0.141446
-gmp_int 128 gcd 2.4583
-gmp_int 256 + 0.0437202
-gmp_int 256 - 0.0449331
-gmp_int 256 * 0.128456
-gmp_int 256 / 0.91168
-gmp_int 256 str 0.00293026
-gmp_int 256 +(int)0.0421762
-gmp_int 256 -(int)0.0392365
-gmp_int 256 *(int)0.0260961
-gmp_int 256 /(int)0.101468
-gmp_int 256 % 0.686075
-gmp_int 256 | 0.0605797
-gmp_int 256 & 0.0657431
-gmp_int 256 ^ 0.0628266
-gmp_int 256 << 0.0309127
-gmp_int 256 >> 0.028966
-gmp_int 256 %(int)0.0997194
-gmp_int 256 |(int)0.141959
-gmp_int 256 &(int)0.148873
-gmp_int 256 ^(int)0.145267
-gmp_int 256 gcd 5.7433
-gmp_int 512 + 0.0502054
-gmp_int 512 - 0.053661
-gmp_int 512 * 0.517967
-gmp_int 512 / 1.04166
-gmp_int 512 str 0.00589914
-gmp_int 512 +(int)0.0648096
-gmp_int 512 -(int)0.0579614
-gmp_int 512 *(int)0.0336047
-gmp_int 512 /(int)0.18882
-gmp_int 512 % 0.792461
-gmp_int 512 | 0.0862186
-gmp_int 512 & 0.0910233
-gmp_int 512 ^ 0.086449
-gmp_int 512 << 0.0480825
-gmp_int 512 >> 0.0323891
-gmp_int 512 %(int)0.183615
-gmp_int 512 |(int)0.150229
-gmp_int 512 &(int)0.154253
-gmp_int 512 ^(int)0.156314
-gmp_int 512 gcd 13.5018
-gmp_int 1024 + 0.065979
-gmp_int 1024 - 0.0703067
-gmp_int 1024 * 1.51138
-gmp_int 1024 / 1.26397
-gmp_int 1024 str 0.0145211
-gmp_int 1024 +(int)0.105223
-gmp_int 1024 -(int)0.0997431
-gmp_int 1024 *(int)0.0487139
-gmp_int 1024 /(int)0.374919
-gmp_int 1024 % 1.02412
-gmp_int 1024 | 0.134887
-gmp_int 1024 & 0.148173
-gmp_int 1024 ^ 0.136369
-gmp_int 1024 << 0.0702549
-gmp_int 1024 >> 0.037103
-gmp_int 1024 %(int)0.351263
-gmp_int 1024 |(int)0.155137
-gmp_int 1024 &(int)0.163801
-gmp_int 1024 ^(int)0.15826
-gmp_int 1024 gcd 32.5205
-cpp_int 128 + 0.0271391
-cpp_int 128 - 0.0302204
-cpp_int 128 * 0.0764199
-cpp_int 128 / 0.601063
-cpp_int 128 str 0.00186546
-cpp_int 128 +(int)0.0203604
-cpp_int 128 -(int)0.0155424
-cpp_int 128 *(int)0.0306376
-cpp_int 128 /(int)0.318461
-cpp_int 128 % 0.488484
-cpp_int 128 | 0.0295702
-cpp_int 128 & 0.0299046
-cpp_int 128 ^ 0.0300509
-cpp_int 128 << 0.0220286
-cpp_int 128 >> 0.0208765
-cpp_int 128 %(int)0.197942
-cpp_int 128 |(int)0.0385046
-cpp_int 128 &(int)0.0463351
-cpp_int 128 ^(int)0.0381023
-cpp_int 128 gcd 4.48165
-cpp_int 256 + 0.0354288
-cpp_int 256 - 0.03826
-cpp_int 256 * 0.193581
-cpp_int 256 / 0.694115
-cpp_int 256 str 0.00327905
-cpp_int 256 +(int)0.0238597
-cpp_int 256 -(int)0.0199724
-cpp_int 256 *(int)0.040404
-cpp_int 256 /(int)0.433035
-cpp_int 256 % 0.597931
-cpp_int 256 | 0.0378751
-cpp_int 256 & 0.0389208
-cpp_int 256 ^ 0.0381634
-cpp_int 256 << 0.0294239
-cpp_int 256 >> 0.0265325
-cpp_int 256 %(int)0.298382
-cpp_int 256 |(int)0.0425891
-cpp_int 256 &(int)0.0550224
-cpp_int 256 ^(int)0.0432356
-cpp_int 256 gcd 10.1686
-cpp_int 512 + 0.0536949
-cpp_int 512 - 0.0529947
-cpp_int 512 * 0.656832
-cpp_int 512 / 0.915068
-cpp_int 512 str 0.0076685
-cpp_int 512 +(int)0.0262742
-cpp_int 512 -(int)0.0223562
-cpp_int 512 *(int)0.0537717
-cpp_int 512 /(int)0.641615
-cpp_int 512 % 0.807811
-cpp_int 512 | 0.0523944
-cpp_int 512 & 0.04981
-cpp_int 512 ^ 0.0494246
-cpp_int 512 << 0.0365532
-cpp_int 512 >> 0.0304931
-cpp_int 512 %(int)0.478772
-cpp_int 512 |(int)0.0479629
-cpp_int 512 &(int)0.0697964
-cpp_int 512 ^(int)0.0466764
-cpp_int 512 gcd 25.1877
-cpp_int 1024 + 0.0884854
-cpp_int 1024 - 0.0822931
-cpp_int 1024 * 2.47851
-cpp_int 1024 / 1.36697
-cpp_int 1024 str 0.0217405
-cpp_int 1024 +(int)0.0296193
-cpp_int 1024 -(int)0.0246399
-cpp_int 1024 *(int)0.0790137
-cpp_int 1024 /(int)1.05122
-cpp_int 1024 % 1.24204
-cpp_int 1024 | 0.0751774
-cpp_int 1024 & 0.0745785
-cpp_int 1024 ^ 0.075182
-cpp_int 1024 << 0.0522035
-cpp_int 1024 >> 0.0383751
-cpp_int 1024 %(int)0.85137
-cpp_int 1024 |(int)0.0549147
-cpp_int 1024 &(int)0.101779
-cpp_int 1024 ^(int)0.0550852
-cpp_int 1024 gcd 69.0626
-cpp_int(fixed) 128 + 0.023195
-cpp_int(fixed) 128 - 0.0255758
-cpp_int(fixed) 128 * 0.0560495
-cpp_int(fixed) 128 / 0.20335
-cpp_int(fixed) 128 str 0.00107409
-cpp_int(fixed) 128 +(int)0.013729
-cpp_int(fixed) 128 -(int)0.0103816
-cpp_int(fixed) 128 *(int)0.0290285
-cpp_int(fixed) 128 /(int)0.134603
-cpp_int(fixed) 128 % 0.193104
-cpp_int(fixed) 128 | 0.0211746
-cpp_int(fixed) 128 & 0.0234269
-cpp_int(fixed) 128 ^ 0.0214753
-cpp_int(fixed) 128 << 0.0189966
-cpp_int(fixed) 128 >> 0.0164431
-cpp_int(fixed) 128 %(int)0.111723
-cpp_int(fixed) 128 |(int)0.020319
-cpp_int(fixed) 128 &(int)0.0281931
-cpp_int(fixed) 128 ^(int)0.0205145
-cpp_int(fixed) 128 gcd 3.69729
-cpp_int(fixed) 256 + 0.0316591
-cpp_int(fixed) 256 - 0.0387139
-cpp_int(fixed) 256 * 0.162173
-cpp_int(fixed) 256 / 0.313292
-cpp_int(fixed) 256 str 0.00227396
-cpp_int(fixed) 256 +(int)0.0195617
-cpp_int(fixed) 256 -(int)0.0153586
-cpp_int(fixed) 256 *(int)0.0403434
-cpp_int(fixed) 256 /(int)0.256092
-cpp_int(fixed) 256 % 0.314303
-cpp_int(fixed) 256 | 0.0329594
-cpp_int(fixed) 256 & 0.026925
-cpp_int(fixed) 256 ^ 0.0297291
-cpp_int(fixed) 256 << 0.0262879
-cpp_int(fixed) 256 >> 0.0222577
-cpp_int(fixed) 256 %(int)0.207915
-cpp_int(fixed) 256 |(int)0.0258999
-cpp_int(fixed) 256 &(int)0.0409067
-cpp_int(fixed) 256 ^(int)0.0260211
-cpp_int(fixed) 256 gcd 9.22552
-cpp_int(fixed) 512 + 0.0515755
-cpp_int(fixed) 512 - 0.0475007
-cpp_int(fixed) 512 * 0.462871
-cpp_int(fixed) 512 / 0.52874
-cpp_int(fixed) 512 str 0.00597122
-cpp_int(fixed) 512 +(int)0.0212179
-cpp_int(fixed) 512 -(int)0.0179683
-cpp_int(fixed) 512 *(int)0.0542558
-cpp_int(fixed) 512 /(int)0.459431
-cpp_int(fixed) 512 % 0.512737
-cpp_int(fixed) 512 | 0.0398115
-cpp_int(fixed) 512 & 0.032775
-cpp_int(fixed) 512 ^ 0.0394438
-cpp_int(fixed) 512 << 0.0317039
-cpp_int(fixed) 512 >> 0.0275545
-cpp_int(fixed) 512 %(int)0.38701
-cpp_int(fixed) 512 |(int)0.0306217
-cpp_int(fixed) 512 &(int)0.0539505
-cpp_int(fixed) 512 ^(int)0.0308272
-cpp_int(fixed) 512 gcd 24.8643
-cpp_int(fixed) 1024 + 0.0833072
-cpp_int(fixed) 1024 - 0.0864345
-cpp_int(fixed) 1024 * 1.61211
-cpp_int(fixed) 1024 / 0.965347
-cpp_int(fixed) 1024 str 0.0174989
-cpp_int(fixed) 1024 +(int)0.0286337
-cpp_int(fixed) 1024 -(int)0.0219173
-cpp_int(fixed) 1024 *(int)0.0826023
-cpp_int(fixed) 1024 /(int)0.855435
-cpp_int(fixed) 1024 % 0.944678
-cpp_int(fixed) 1024 | 0.071698
-cpp_int(fixed) 1024 & 0.0503183
-cpp_int(fixed) 1024 ^ 0.0721252
-cpp_int(fixed) 1024 << 0.0488381
-cpp_int(fixed) 1024 >> 0.0382038
-cpp_int(fixed) 1024 %(int)0.760262
-cpp_int(fixed) 1024 |(int)0.0426336
-cpp_int(fixed) 1024 &(int)0.0863606
-cpp_int(fixed) 1024 ^(int)0.0429944
-cpp_int(fixed) 1024 gcd 73.4335
-cpp_rational 128 + 18.1263
-cpp_rational 128 - 18.2374
-cpp_rational 128 * 32.3559
-cpp_rational 128 / 63.9498
-cpp_rational 128 str 0.0199393
-cpp_rational 128 +(int)2.67249
-cpp_rational 128 -(int)2.66785
-cpp_rational 128 *(int)3.1466
-cpp_rational 128 /(int)3.13785
-cpp_rational 256 + 44.1182
-cpp_rational 256 - 43.8659
-cpp_rational 256 * 82.4247
-cpp_rational 256 / 145.045
-cpp_rational 256 str 0.0511907
-cpp_rational 256 +(int)3.04309
-cpp_rational 256 -(int)3.09023
-cpp_rational 256 *(int)3.79056
-cpp_rational 256 /(int)3.76931
-cpp_rational 512 + 103.169
-cpp_rational 512 - 103.481
-cpp_rational 512 * 197.198
-cpp_rational 512 / 328.069
-cpp_rational 512 str 0.118839
-cpp_rational 512 +(int)3.83046
-cpp_rational 512 -(int)3.74494
-cpp_rational 512 *(int)4.93935
-cpp_rational 512 /(int)5.06758
-cpp_rational 1024 + 244.055
-cpp_rational 1024 - 244.887
-cpp_rational 1024 * 473.057
-cpp_rational 1024 / 784.806
-cpp_rational 1024 str 0.285367
-cpp_rational 1024 +(int)5.08346
-cpp_rational 1024 -(int)5.09156
-cpp_rational 1024 *(int)6.89845
-cpp_rational 1024 /(int)7.17803
-mpq_rational 128 + 3.06312
-mpq_rational 128 - 3.08322
-mpq_rational 128 * 5.78521
-mpq_rational 128 / 14.639
-mpq_rational 128 str 0.00368909
-mpq_rational 128 +(int)0.670618
-mpq_rational 128 -(int)0.673405
-mpq_rational 128 *(int)1.16457
-mpq_rational 128 /(int)1.38449
-mpq_rational 256 + 6.67695
-mpq_rational 256 - 6.69018
-mpq_rational 256 * 12.6008
-mpq_rational 256 / 26.2494
-mpq_rational 256 str 0.00598659
-mpq_rational 256 +(int)0.717144
-mpq_rational 256 -(int)0.707904
-mpq_rational 256 *(int)1.22223
-mpq_rational 256 /(int)1.46594
-mpq_rational 512 + 15.5064
-mpq_rational 512 - 15.5321
-mpq_rational 512 * 28.6562
-mpq_rational 512 / 53.0571
-mpq_rational 512 str 0.0119915
-mpq_rational 512 +(int)0.823739
-mpq_rational 512 -(int)0.815246
-mpq_rational 512 *(int)1.34992
-mpq_rational 512 /(int)1.57931
-mpq_rational 1024 + 37.8546
-mpq_rational 1024 - 37.8365
-mpq_rational 1024 * 69.1537
-mpq_rational 1024 / 120.772
-mpq_rational 1024 str 0.028722
-mpq_rational 1024 +(int)0.931322
-mpq_rational 1024 -(int)0.937541
-mpq_rational 1024 *(int)1.4952
-mpq_rational 1024 /(int)1.78479
-tommath_int 128 + 0.0217192
-tommath_int 128 - 0.0291902
-tommath_int 128 * 0.111627
-tommath_int 128 / 2.08463
-tommath_int 128 str 0.0168021
-tommath_int 128 +(int)0.257132
-tommath_int 128 -(int)0.203455
-tommath_int 128 *(int)0.238829
-tommath_int 128 /(int)1.59094
-tommath_int 128 % 2.85844
-tommath_int 128 | 0.129637
-tommath_int 128 & 0.131309
-tommath_int 128 ^ 0.130689
-tommath_int 128 << 0.0401547
-tommath_int 128 >> 0.23176
-tommath_int 128 %(int)1.79288
-tommath_int 128 |(int)0.335087
-tommath_int 128 &(int)0.340397
-tommath_int 128 ^(int)0.336121
-tommath_int 128 gcd 12.105
-tommath_int 256 + 0.0314797
-tommath_int 256 - 0.0397314
-tommath_int 256 * 0.339525
-tommath_int 256 / 2.90357
-tommath_int 256 str 0.0507118
-tommath_int 256 +(int)0.27657
-tommath_int 256 -(int)0.218347
-tommath_int 256 *(int)0.272846
-tommath_int 256 /(int)2.23033
-tommath_int 256 % 3.05431
-tommath_int 256 | 0.14062
-tommath_int 256 & 0.149703
-tommath_int 256 ^ 0.143938
-tommath_int 256 << 0.0663968
-tommath_int 256 >> 0.261181
-tommath_int 256 %(int)2.19631
-tommath_int 256 |(int)0.344931
-tommath_int 256 &(int)0.354773
-tommath_int 256 ^(int)0.337315
-tommath_int 256 gcd 25.2396
-tommath_int 512 + 0.0423742
-tommath_int 512 - 0.0520296
-tommath_int 512 * 0.974058
-tommath_int 512 / 4.55815
-tommath_int 512 str 0.123612
-tommath_int 512 +(int)0.293832
-tommath_int 512 -(int)0.23252
-tommath_int 512 *(int)0.325472
-tommath_int 512 /(int)3.45058
-tommath_int 512 % 4.64676
-tommath_int 512 | 0.149674
-tommath_int 512 & 0.15487
-tommath_int 512 ^ 0.150772
-tommath_int 512 << 0.0938596
-tommath_int 512 >> 0.289806
-tommath_int 512 %(int)3.43906
-tommath_int 512 |(int)0.350645
-tommath_int 512 &(int)0.364622
-tommath_int 512 ^(int)0.347472
-tommath_int 512 gcd 54.7712
-tommath_int 1024 + 0.0724498
-tommath_int 1024 - 0.0774105
-tommath_int 1024 * 3.11813
-tommath_int 1024 / 11.2594
-tommath_int 1024 str 0.380528
-tommath_int 1024 +(int)0.329666
-tommath_int 1024 -(int)0.261392
-tommath_int 1024 *(int)0.41516
-tommath_int 1024 /(int)8.38249
-tommath_int 1024 % 11.2704
-tommath_int 1024 | 0.414581
-tommath_int 1024 & 0.417234
-tommath_int 1024 ^ 0.419285
-tommath_int 1024 << 0.161738
-tommath_int 1024 >> 0.495316
-tommath_int 1024 %(int)8.45761
-tommath_int 1024 |(int)0.587063
-tommath_int 1024 &(int)0.613817
-tommath_int 1024 ^(int)0.587566
-tommath_int 1024 gcd 128.781
-cpp_dec_float 50 + 0.0238412
-cpp_dec_float 50 - 0.026085
-cpp_dec_float 50 * 0.292488
-cpp_dec_float 50 / 3.99158
-cpp_dec_float 50 str 0.0185371
-cpp_dec_float 50 +(int)0.0522868
-cpp_dec_float 50 -(int)0.0588879
-cpp_dec_float 50 *(int)0.118517
-cpp_dec_float 50 /(int)0.246362
-cpp_dec_float 100 + 0.0293132
-cpp_dec_float 100 - 0.0304546
-cpp_dec_float 100 * 0.583535
-cpp_dec_float 100 / 8.1132
-cpp_dec_float 100 str 0.0318154
-cpp_dec_float 100 +(int)0.0626744
-cpp_dec_float 100 -(int)0.0638241
-cpp_dec_float 100 *(int)0.191461
-cpp_dec_float 100 /(int)0.412828
-cpp_dec_float 500 + 0.0605518
-cpp_dec_float 500 - 0.0625459
-cpp_dec_float 500 * 5.08004
-cpp_dec_float 500 / 53.775
-cpp_dec_float 500 str 0.131303
-cpp_dec_float 500 +(int)0.105128
-cpp_dec_float 500 -(int)0.113107
-cpp_dec_float 500 *(int)0.736865
-cpp_dec_float 500 /(int)1.62534
-mpfr_float 50 + 0.0604351
-mpfr_float 50 - 0.073623
-mpfr_float 50 * 0.332216
-mpfr_float 50 / 1.65596
-mpfr_float 50 str 0.0292843
-mpfr_float 50 +(int)0.107103
-mpfr_float 50 -(int)0.141072
-mpfr_float 50 *(int)0.151189
-mpfr_float 50 /(int)0.202945
-mpfr_float 100 + 0.0651951
-mpfr_float 100 - 0.078328
-mpfr_float 100 * 0.462025
-mpfr_float 100 / 2.28108
-mpfr_float 100 str 0.0379418
-mpfr_float 100 +(int)0.112256
-mpfr_float 100 -(int)0.146486
-mpfr_float 100 *(int)0.160234
-mpfr_float 100 /(int)0.256434
-mpfr_float 500 + 0.0777324
-mpfr_float 500 - 0.089375
-mpfr_float 500 * 3.71393
-mpfr_float 500 / 13.6039
-mpfr_float 500 str 0.156426
-mpfr_float 500 +(int)0.123967
-mpfr_float 500 -(int)0.158239
-mpfr_float 500 *(int)0.265474
-mpfr_float 500 /(int)0.709137
+gmp_float 50 + 0.110988
+gmp_float 50 - 0.119898
+gmp_float 50 * 0.275044
+gmp_float 50 / 1.27708
+gmp_float 50 str 0.013276
+gmp_float 50 +(int)0.0330888
+gmp_float 50 -(int)0.134451
+gmp_float 50 *(int)0.0422135
+gmp_float 50 /(int)0.180393
+gmp_float 50 construct0.19737
+gmp_float 50 construct(unsigned)0.208078
+gmp_float 50 construct(unsigned long long)0.520025
+gmp_float 50 + 0.498089
+gmp_float 50 - 0.502235
+gmp_float 50 * 0.564768
+gmp_float 50 / 0.90324
+gmp_float 50 + 0.477999
+gmp_float 50 - 0.499682
+gmp_float 50 * 0.551747
+gmp_float 50 / 0.893752
+gmp_float 100 + 0.111217
+gmp_float 100 - 0.120498
+gmp_float 100 * 0.416175
+gmp_float 100 / 1.69515
+gmp_float 100 str 0.0202949
+gmp_float 100 +(int)0.0386882
+gmp_float 100 -(int)0.1351
+gmp_float 100 *(int)0.0493716
+gmp_float 100 /(int)0.23378
+gmp_float 100 construct0.196599
+gmp_float 100 construct(unsigned)0.207062
+gmp_float 100 construct(unsigned long long)0.51936
+gmp_float 100 + 0.517172
+gmp_float 100 - 0.509588
+gmp_float 100 * 0.575954
+gmp_float 100 / 1.04262
+gmp_float 100 + 0.476701
+gmp_float 100 - 0.503546
+gmp_float 100 * 0.564962
+gmp_float 100 / 1.03328
+gmp_float 500 + 0.15445
+gmp_float 500 - 0.164099
+gmp_float 500 * 3.32799
+gmp_float 500 / 8.12655
+gmp_float 500 str 0.141162
+gmp_float 500 +(int)0.0646201
+gmp_float 500 -(int)0.176876
+gmp_float 500 *(int)0.0857876
+gmp_float 500 /(int)0.710204
+gmp_float 500 construct0.206063
+gmp_float 500 construct(unsigned)0.217019
+gmp_float 500 construct(unsigned long long)0.538021
+gmp_float 500 + 0.552532
+gmp_float 500 - 0.555754
+gmp_float 500 * 0.717186
+gmp_float 500 / 2.24686
+gmp_float 500 + 0.490614
+gmp_float 500 - 0.547751
+gmp_float 500 * 0.700957
+gmp_float 500 / 2.24146
+gmp_int 128 + 0.0421662
+gmp_int 128 - 0.0411848
+gmp_int 128 * 0.0708996
+gmp_int 128 / 0.868916
+gmp_int 128 str 0.00185638
+gmp_int 128 +(int)0.0311237
+gmp_int 128 -(int)0.030585
+gmp_int 128 *(int)0.022756
+gmp_int 128 /(int)0.0560401
+gmp_int 128 construct0.196182
+gmp_int 128 construct(unsigned)0.206113
+gmp_int 128 construct(unsigned long long)0.719741
+gmp_int 128 % 0.64148
+gmp_int 128 | 0.0474678
+gmp_int 128 & 0.0538128
+gmp_int 128 ^ 0.0497194
+gmp_int 128 << 0.0273994
+gmp_int 128 >> 0.0288237
+gmp_int 128 %(int)0.0572117
+gmp_int 128 |(int)0.141119
+gmp_int 128 &(int)0.141306
+gmp_int 128 ^(int)0.143934
+gmp_int 128 gcd 2.45095
+gmp_int 128 + 0.71217
+gmp_int 128 - 0.687129
+gmp_int 128 * 0.716479
+gmp_int 128 / 1.04926
+gmp_int 128 + 0.68136
+gmp_int 128 - 0.681187
+gmp_int 128 * 3.1627
+gmp_int 128 / 0.685487
+gmp_int 256 + 0.0449584
+gmp_int 256 - 0.0461316
+gmp_int 256 * 0.134302
+gmp_int 256 / 0.951505
+gmp_int 256 str 0.00344576
+gmp_int 256 +(int)0.0428011
+gmp_int 256 -(int)0.0400434
+gmp_int 256 *(int)0.0282672
+gmp_int 256 /(int)0.0982823
+gmp_int 256 construct0.201199
+gmp_int 256 construct(unsigned)0.211295
+gmp_int 256 construct(unsigned long long)0.729487
+gmp_int 256 % 0.703592
+gmp_int 256 | 0.0618281
+gmp_int 256 & 0.0652169
+gmp_int 256 ^ 0.0630174
+gmp_int 256 << 0.031973
+gmp_int 256 >> 0.0310184
+gmp_int 256 %(int)0.10258
+gmp_int 256 |(int)0.142987
+gmp_int 256 &(int)0.139398
+gmp_int 256 ^(int)0.144825
+gmp_int 256 gcd 5.89505
+gmp_int 256 + 0.728978
+gmp_int 256 - 0.707806
+gmp_int 256 * 0.731454
+gmp_int 256 / 1.17203
+gmp_int 256 + 0.68929
+gmp_int 256 - 0.683532
+gmp_int 256 * 3.15114
+gmp_int 256 / 0.689516
+gmp_int 512 + 0.0522202
+gmp_int 512 - 0.0567637
+gmp_int 512 * 0.532277
+gmp_int 512 / 1.06442
+gmp_int 512 str 0.00618403
+gmp_int 512 +(int)0.0665539
+gmp_int 512 -(int)0.0578194
+gmp_int 512 *(int)0.0361075
+gmp_int 512 /(int)0.183564
+gmp_int 512 construct0.19783
+gmp_int 512 construct(unsigned)0.206944
+gmp_int 512 construct(unsigned long long)0.724649
+gmp_int 512 % 0.819828
+gmp_int 512 | 0.0856626
+gmp_int 512 & 0.092104
+gmp_int 512 ^ 0.0869819
+gmp_int 512 << 0.0471709
+gmp_int 512 >> 0.0337511
+gmp_int 512 %(int)0.188529
+gmp_int 512 |(int)0.155656
+gmp_int 512 &(int)0.142498
+gmp_int 512 ^(int)0.152773
+gmp_int 512 gcd 13.6993
+gmp_int 512 + 0.759532
+gmp_int 512 - 0.732529
+gmp_int 512 * 0.779921
+gmp_int 512 / 1.39149
+gmp_int 512 + 0.694235
+gmp_int 512 - 0.69246
+gmp_int 512 * 3.17094
+gmp_int 512 / 0.688995
+gmp_int 1024 + 0.0699873
+gmp_int 1024 - 0.0731244
+gmp_int 1024 * 1.57852
+gmp_int 1024 / 1.30215
+gmp_int 1024 str 0.0144523
+gmp_int 1024 +(int)0.108272
+gmp_int 1024 -(int)0.100541
+gmp_int 1024 *(int)0.0518882
+gmp_int 1024 /(int)0.352238
+gmp_int 1024 construct0.19744
+gmp_int 1024 construct(unsigned)0.216229
+gmp_int 1024 construct(unsigned long long)0.722262
+gmp_int 1024 % 1.01959
+gmp_int 1024 | 0.136082
+gmp_int 1024 & 0.144412
+gmp_int 1024 ^ 0.139109
+gmp_int 1024 << 0.0721984
+gmp_int 1024 >> 0.0388038
+gmp_int 1024 %(int)0.355222
+gmp_int 1024 |(int)0.163236
+gmp_int 1024 &(int)0.141249
+gmp_int 1024 ^(int)0.161662
+gmp_int 1024 gcd 33.2232
+gmp_int 1024 + 0.83035
+gmp_int 1024 - 0.78115
+gmp_int 1024 * 0.815503
+gmp_int 1024 / 1.84054
+gmp_int 1024 + 0.690013
+gmp_int 1024 - 0.690838
+gmp_int 1024 * 3.20893
+gmp_int 1024 / 0.707578
+cpp_int(unsigned, fixed)64 + 0.00232166
+cpp_int(unsigned, fixed)64 - 0.00234506
+cpp_int(unsigned, fixed)64 * 0.00470304
+cpp_int(unsigned, fixed)64 / 0.0714786
+cpp_int(unsigned, fixed)64 str 0.00256457
+cpp_int(unsigned, fixed)64 +(int)0.00162053
+cpp_int(unsigned, fixed)64 -(int)0.00163617
+cpp_int(unsigned, fixed)64 *(int)0.00236511
+cpp_int(unsigned, fixed)64 /(int)0.0299559
+cpp_int(unsigned, fixed)64 construct0.00111299
+cpp_int(unsigned, fixed)64 construct(unsigned)0.00110489
+cpp_int(unsigned, fixed)64 construct(unsigned long long)0.00240876
+cpp_int(unsigned, fixed)64 % 0.0702826
+cpp_int(unsigned, fixed)64 | 0.00265921
+cpp_int(unsigned, fixed)64 & 0.00261653
+cpp_int(unsigned, fixed)64 ^ 0.0040003
+cpp_int(unsigned, fixed)64 << 0.00161592
+cpp_int(unsigned, fixed)64 >> 0.00161599
+cpp_int(unsigned, fixed)64 %(int)0.0298064
+cpp_int(unsigned, fixed)64 |(int)0.00165538
+cpp_int(unsigned, fixed)64 &(int)0.00161431
+cpp_int(unsigned, fixed)64 ^(int)0.00184507
+cpp_int(unsigned, fixed)64 gcd 0.602722
+cpp_int(unsigned, fixed)64 + 0.00253726
+cpp_int(unsigned, fixed)64 - 0.00301519
+cpp_int(unsigned, fixed)64 * 0.00474872
+cpp_int(unsigned, fixed)64 / 0.0450108
+cpp_int(unsigned, fixed)64 + 0.0020173
+cpp_int(unsigned, fixed)64 - 0.00191079
+cpp_int(unsigned, fixed)64 * 0.00445077
+cpp_int(unsigned, fixed)64 / 0.0294528
+cpp_int(fixed) 64 + 0.00573474
+cpp_int(fixed) 64 - 0.0096272
+cpp_int(fixed) 64 * 0.00897607
+cpp_int(fixed) 64 / 0.0783882
+cpp_int(fixed) 64 str 0.00251659
+cpp_int(fixed) 64 +(int)0.00636247
+cpp_int(fixed) 64 -(int)0.00668367
+cpp_int(fixed) 64 *(int)0.00548722
+cpp_int(fixed) 64 /(int)0.0362985
+cpp_int(fixed) 64 construct0.00161745
+cpp_int(fixed) 64 construct(unsigned)0.00209147
+cpp_int(fixed) 64 construct(unsigned long long)0.00204998
+cpp_int(fixed) 64 % 0.0777437
+cpp_int(fixed) 64 | 0.0108982
+cpp_int(fixed) 64 & 0.0124165
+cpp_int(fixed) 64 ^ 0.0110313
+cpp_int(fixed) 64 << 0.00516511
+cpp_int(fixed) 64 >> 0.00399499
+cpp_int(fixed) 64 %(int)0.0341425
+cpp_int(fixed) 64 |(int)0.0111002
+cpp_int(fixed) 64 &(int)0.0104782
+cpp_int(fixed) 64 ^(int)0.0107199
+cpp_int(fixed) 64 gcd 0.604291
+cpp_int(fixed) 64 + 0.00605482
+cpp_int(fixed) 64 - 0.00714372
+cpp_int(fixed) 64 * 0.00873093
+cpp_int(fixed) 64 / 0.0510195
+cpp_int(fixed) 64 + 0.00430062
+cpp_int(fixed) 64 - 0.00387577
+cpp_int(fixed) 64 * 0.00567824
+cpp_int(fixed) 64 / 0.0320162
+cpp_int(fixed) 128 + 0.0358493
+cpp_int(fixed) 128 - 0.0397574
+cpp_int(fixed) 128 * 0.0672363
+cpp_int(fixed) 128 / 0.222933
+cpp_int(fixed) 128 str 0.0015613
+cpp_int(fixed) 128 +(int)0.0268311
+cpp_int(fixed) 128 -(int)0.0241848
+cpp_int(fixed) 128 *(int)0.0328109
+cpp_int(fixed) 128 /(int)0.137619
+cpp_int(fixed) 128 construct0.00164665
+cpp_int(fixed) 128 construct(unsigned)0.0015986
+cpp_int(fixed) 128 construct(unsigned long long)0.00312994
+cpp_int(fixed) 128 % 0.1971
+cpp_int(fixed) 128 | 0.0380136
+cpp_int(fixed) 128 & 0.0341411
+cpp_int(fixed) 128 ^ 0.0351059
+cpp_int(fixed) 128 << 0.0320915
+cpp_int(fixed) 128 >> 0.0293055
+cpp_int(fixed) 128 %(int)0.103684
+cpp_int(fixed) 128 |(int)0.0317854
+cpp_int(fixed) 128 &(int)0.0417383
+cpp_int(fixed) 128 ^(int)0.0312355
+cpp_int(fixed) 128 gcd 4.18006
+cpp_int(fixed) 128 + 0.0341301
+cpp_int(fixed) 128 - 0.0346952
+cpp_int(fixed) 128 * 0.0675308
+cpp_int(fixed) 128 / 0.466907
+cpp_int(fixed) 128 + 0.0168342
+cpp_int(fixed) 128 - 0.0169449
+cpp_int(fixed) 128 * 0.0673436
+cpp_int(fixed) 128 / 0.0327432
+cpp_int(fixed) 256 + 0.0552275
+cpp_int(fixed) 256 - 0.0560103
+cpp_int(fixed) 256 * 0.166666
+cpp_int(fixed) 256 / 0.349956
+cpp_int(fixed) 256 str 0.00297279
+cpp_int(fixed) 256 +(int)0.0410749
+cpp_int(fixed) 256 -(int)0.0368306
+cpp_int(fixed) 256 *(int)0.049867
+cpp_int(fixed) 256 /(int)0.253796
+cpp_int(fixed) 256 construct0.00363363
+cpp_int(fixed) 256 construct(unsigned)0.00370466
+cpp_int(fixed) 256 construct(unsigned long long)0.00388115
+cpp_int(fixed) 256 % 0.334027
+cpp_int(fixed) 256 | 0.0529581
+cpp_int(fixed) 256 & 0.0501131
+cpp_int(fixed) 256 ^ 0.0530521
+cpp_int(fixed) 256 << 0.0507053
+cpp_int(fixed) 256 >> 0.039006
+cpp_int(fixed) 256 %(int)0.200647
+cpp_int(fixed) 256 |(int)0.0466958
+cpp_int(fixed) 256 &(int)0.0539427
+cpp_int(fixed) 256 ^(int)0.0476923
+cpp_int(fixed) 256 gcd 10.2671
+cpp_int(fixed) 256 + 0.0452762
+cpp_int(fixed) 256 - 0.0444216
+cpp_int(fixed) 256 * 0.112885
+cpp_int(fixed) 256 / 1.36886
+cpp_int(fixed) 256 + 0.0170491
+cpp_int(fixed) 256 - 0.0176783
+cpp_int(fixed) 256 * 0.107306
+cpp_int(fixed) 256 / 0.0340708
+cpp_int(fixed) 512 + 0.0760722
+cpp_int(fixed) 512 - 0.0756027
+cpp_int(fixed) 512 * 0.500399
+cpp_int(fixed) 512 / 0.560837
+cpp_int(fixed) 512 str 0.00708386
+cpp_int(fixed) 512 +(int)0.0524416
+cpp_int(fixed) 512 -(int)0.0503396
+cpp_int(fixed) 512 *(int)0.0658566
+cpp_int(fixed) 512 /(int)0.446782
+cpp_int(fixed) 512 construct0.00576526
+cpp_int(fixed) 512 construct(unsigned)0.0058189
+cpp_int(fixed) 512 construct(unsigned long long)0.00556537
+cpp_int(fixed) 512 % 0.539708
+cpp_int(fixed) 512 | 0.0676884
+cpp_int(fixed) 512 & 0.0588367
+cpp_int(fixed) 512 ^ 0.0695132
+cpp_int(fixed) 512 << 0.0597514
+cpp_int(fixed) 512 >> 0.0515714
+cpp_int(fixed) 512 %(int)0.377704
+cpp_int(fixed) 512 |(int)0.0536974
+cpp_int(fixed) 512 &(int)0.070425
+cpp_int(fixed) 512 ^(int)0.0540962
+cpp_int(fixed) 512 gcd 26.2762
+cpp_int(fixed) 512 + 0.0571069
+cpp_int(fixed) 512 - 0.0563175
+cpp_int(fixed) 512 * 0.177444
+cpp_int(fixed) 512 / 3.1662
+cpp_int(fixed) 512 + 0.0172628
+cpp_int(fixed) 512 - 0.0180756
+cpp_int(fixed) 512 * 0.171821
+cpp_int(fixed) 512 / 0.0444905
+cpp_int(fixed) 1024 + 0.121124
+cpp_int(fixed) 1024 - 0.114246
+cpp_int(fixed) 1024 * 1.54633
+cpp_int(fixed) 1024 / 0.975643
+cpp_int(fixed) 1024 str 0.0172514
+cpp_int(fixed) 1024 +(int)0.0728817
+cpp_int(fixed) 1024 -(int)0.0621059
+cpp_int(fixed) 1024 *(int)0.0948565
+cpp_int(fixed) 1024 /(int)0.84764
+cpp_int(fixed) 1024 construct0.00535599
+cpp_int(fixed) 1024 construct(unsigned)0.00836042
+cpp_int(fixed) 1024 construct(unsigned long long)0.00577713
+cpp_int(fixed) 1024 % 0.94847
+cpp_int(fixed) 1024 | 0.100936
+cpp_int(fixed) 1024 & 0.0774574
+cpp_int(fixed) 1024 ^ 0.09783
+cpp_int(fixed) 1024 << 0.0677088
+cpp_int(fixed) 1024 >> 0.0626121
+cpp_int(fixed) 1024 %(int)0.743202
+cpp_int(fixed) 1024 |(int)0.0819107
+cpp_int(fixed) 1024 &(int)0.112823
+cpp_int(fixed) 1024 ^(int)0.0806317
+cpp_int(fixed) 1024 gcd 76.2849
+cpp_int(fixed) 1024 + 0.0636724
+cpp_int(fixed) 1024 - 0.06467
+cpp_int(fixed) 1024 * 0.303514
+cpp_int(fixed) 1024 / 8.04418
+cpp_int(fixed) 1024 + 0.0181245
+cpp_int(fixed) 1024 - 0.0190581
+cpp_int(fixed) 1024 * 0.299236
+cpp_int(fixed) 1024 / 0.106788
+cpp_int 128 + 0.0273725
+cpp_int 128 - 0.0303219
+cpp_int 128 * 0.0774619
+cpp_int 128 / 0.589941
+cpp_int 128 str 0.00189808
+cpp_int 128 +(int)0.0159069
+cpp_int 128 -(int)0.0151244
+cpp_int 128 *(int)0.0235876
+cpp_int 128 /(int)0.235955
+cpp_int 128 construct0.00293927
+cpp_int 128 construct(unsigned)0.00270684
+cpp_int 128 construct(unsigned long long)0.00719854
+cpp_int 128 % 0.37333
+cpp_int 128 | 0.030991
+cpp_int 128 & 0.031605
+cpp_int 128 ^ 0.0318172
+cpp_int 128 << 0.0256107
+cpp_int 128 >> 0.0237523
+cpp_int 128 %(int)0.104856
+cpp_int 128 |(int)0.0280516
+cpp_int 128 &(int)0.0377678
+cpp_int 128 ^(int)0.0283305
+cpp_int 128 gcd 4.98644
+cpp_int 128 + 0.0283071
+cpp_int 128 - 0.027289
+cpp_int 128 * 0.0584001
+cpp_int 128 / 0.733741
+cpp_int 128 + 0.0196594
+cpp_int 128 - 0.0210968
+cpp_int 128 * 7.6372
+cpp_int 128 / 0.0578293
+cpp_int 256 + 0.0384835
+cpp_int 256 - 0.0402028
+cpp_int 256 * 0.211395
+cpp_int 256 / 0.708882
+cpp_int 256 str 0.00391656
+cpp_int 256 +(int)0.0218386
+cpp_int 256 -(int)0.017199
+cpp_int 256 *(int)0.0318939
+cpp_int 256 /(int)0.35212
+cpp_int 256 construct0.00277479
+cpp_int 256 construct(unsigned)0.0030529
+cpp_int 256 construct(unsigned long long)0.00725455
+cpp_int 256 % 0.673748
+cpp_int 256 | 0.0429658
+cpp_int 256 & 0.0455929
+cpp_int 256 ^ 0.0425243
+cpp_int 256 << 0.0401135
+cpp_int 256 >> 0.0302534
+cpp_int 256 %(int)0.203012
+cpp_int 256 |(int)0.0363929
+cpp_int 256 &(int)0.0471524
+cpp_int 256 ^(int)0.0353555
+cpp_int 256 gcd 11.1816
+cpp_int 256 + 0.030223
+cpp_int 256 - 0.0319489
+cpp_int 256 * 0.0885733
+cpp_int 256 / 1.62706
+cpp_int 256 + 0.0215291
+cpp_int 256 - 0.0213343
+cpp_int 256 * 7.7121
+cpp_int 256 / 0.0615507
+cpp_int 512 + 0.0561351
+cpp_int 512 - 0.0543342
+cpp_int 512 * 0.703234
+cpp_int 512 / 0.924042
+cpp_int 512 str 0.00832019
+cpp_int 512 +(int)0.0316584
+cpp_int 512 -(int)0.0248084
+cpp_int 512 *(int)0.0427792
+cpp_int 512 /(int)0.568032
+cpp_int 512 construct0.0028102
+cpp_int 512 construct(unsigned)0.00288857
+cpp_int 512 construct(unsigned long long)0.00723891
+cpp_int 512 % 0.701584
+cpp_int 512 | 0.0537846
+cpp_int 512 & 0.0546439
+cpp_int 512 ^ 0.0542436
+cpp_int 512 << 0.0436188
+cpp_int 512 >> 0.0355247
+cpp_int 512 %(int)0.391566
+cpp_int 512 |(int)0.0418143
+cpp_int 512 &(int)0.0647085
+cpp_int 512 ^(int)0.041758
+cpp_int 512 gcd 27.2257
+cpp_int 512 + 0.0382495
+cpp_int 512 - 0.0386744
+cpp_int 512 * 0.14417
+cpp_int 512 / 3.61202
+cpp_int 512 + 0.0228565
+cpp_int 512 - 0.0222868
+cpp_int 512 * 7.72815
+cpp_int 512 / 0.0732298
+cpp_int 1024 + 0.0928746
+cpp_int 1024 - 0.0853837
+cpp_int 1024 * 2.6591
+cpp_int 1024 / 1.38142
+cpp_int 1024 str 0.0221599
+cpp_int 1024 +(int)0.0430289
+cpp_int 1024 -(int)0.0331224
+cpp_int 1024 *(int)0.0668616
+cpp_int 1024 /(int)0.989885
+cpp_int 1024 construct0.00277298
+cpp_int 1024 construct(unsigned)0.00265201
+cpp_int 1024 construct(unsigned long long)0.00732796
+cpp_int 1024 % 1.14369
+cpp_int 1024 | 0.0827684
+cpp_int 1024 & 0.0843863
+cpp_int 1024 ^ 0.08333
+cpp_int 1024 << 0.0628544
+cpp_int 1024 >> 0.044717
+cpp_int 1024 %(int)0.768511
+cpp_int 1024 |(int)0.0527075
+cpp_int 1024 &(int)0.10089
+cpp_int 1024 ^(int)0.0538323
+cpp_int 1024 gcd 73.3735
+cpp_int 1024 + 0.0463315
+cpp_int 1024 - 0.0468398
+cpp_int 1024 * 0.255279
+cpp_int 1024 / 8.42528
+cpp_int 1024 + 0.0227402
+cpp_int 1024 - 0.0234526
+cpp_int 1024 * 7.86395
+cpp_int 1024 / 0.123568
+cpp_rational 128 + 18.0021
+cpp_rational 128 - 18.0006
+cpp_rational 128 * 31.5924
+cpp_rational 128 / 65.714
+cpp_rational 128 str 0.020339
+cpp_rational 128 +(int)2.47739
+cpp_rational 128 -(int)2.47959
+cpp_rational 128 *(int)2.4377
+cpp_rational 128 /(int)2.50843
+cpp_rational 128 construct0.0102665
+cpp_rational 128 construct(unsigned)0.0624887
+cpp_rational 128 construct(unsigned long long)0.0658436
+cpp_rational 128 + 2.58812
+cpp_rational 128 - 2.60864
+cpp_rational 128 * 5.53837
+cpp_rational 128 / 5.63033
+cpp_rational 128 + 2.68363
+cpp_rational 128 - 2.72926
+cpp_rational 128 * 57.9393
+cpp_rational 128 / 58.0332
+cpp_rational 256 + 46.3981
+cpp_rational 256 - 46.4818
+cpp_rational 256 * 86.0189
+cpp_rational 256 / 172.8
+cpp_rational 256 str 0.0517328
+cpp_rational 256 +(int)2.92179
+cpp_rational 256 -(int)2.90579
+cpp_rational 256 *(int)2.91325
+cpp_rational 256 /(int)3.00689
+cpp_rational 256 construct0.0101737
+cpp_rational 256 construct(unsigned)0.0609531
+cpp_rational 256 construct(unsigned long long)0.0665504
+cpp_rational 256 + 3.0953
+cpp_rational 256 - 3.08277
+cpp_rational 256 * 6.78796
+cpp_rational 256 / 6.90941
+cpp_rational 256 + 3.15142
+cpp_rational 256 - 3.19882
+cpp_rational 256 * 59.3172
+cpp_rational 256 / 59.5431
+cpp_rational 512 + 108.57
+cpp_rational 512 - 108.81
+cpp_rational 512 * 202.007
+cpp_rational 512 / 348.46
+cpp_rational 512 str 0.119248
+cpp_rational 512 +(int)3.80252
+cpp_rational 512 -(int)3.80714
+cpp_rational 512 *(int)3.94768
+cpp_rational 512 /(int)4.00588
+cpp_rational 512 construct0.0101965
+cpp_rational 512 construct(unsigned)0.0613968
+cpp_rational 512 construct(unsigned long long)0.0659082
+cpp_rational 512 + 4.00751
+cpp_rational 512 - 4.0117
+cpp_rational 512 * 9.43852
+cpp_rational 512 / 9.39508
+cpp_rational 512 + 4.05684
+cpp_rational 512 - 4.08474
+cpp_rational 512 * 61.8998
+cpp_rational 512 / 61.9712
+cpp_rational 1024 + 252.723
+cpp_rational 1024 - 253.81
+cpp_rational 1024 * 484.128
+cpp_rational 1024 / 834.057
+cpp_rational 1024 str 0.286067
+cpp_rational 1024 +(int)5.51612
+cpp_rational 1024 -(int)5.51949
+cpp_rational 1024 *(int)5.87507
+cpp_rational 1024 /(int)5.92837
+cpp_rational 1024 construct0.0102909
+cpp_rational 1024 construct(unsigned)0.062674
+cpp_rational 1024 construct(unsigned long long)0.0659089
+cpp_rational 1024 + 5.7444
+cpp_rational 1024 - 5.73296
+cpp_rational 1024 * 15.1475
+cpp_rational 1024 / 14.9497
+cpp_rational 1024 + 5.80438
+cpp_rational 1024 - 5.86
+cpp_rational 1024 * 67.4139
+cpp_rational 1024 / 67.4254
+mpq_rational 128 + 3.16879
+mpq_rational 128 - 3.18835
+mpq_rational 128 * 5.96709
+mpq_rational 128 / 15.0571
+mpq_rational 128 str 0.0037011
+mpq_rational 128 +(int)0.669634
+mpq_rational 128 -(int)0.666993
+mpq_rational 128 *(int)1.18047
+mpq_rational 128 /(int)1.43177
+mpq_rational 128 construct0.383107
+mpq_rational 128 construct(unsigned)0.394551
+mpq_rational 128 construct(unsigned long long)2.13183
+mpq_rational 128 + 2.33701
+mpq_rational 128 - 2.33227
+mpq_rational 128 * 4.15268
+mpq_rational 128 / 4.26818
+mpq_rational 128 + 2.33097
+mpq_rational 128 - 2.31793
+mpq_rational 128 * 9.34086
+mpq_rational 128 / 9.74135
+mpq_rational 256 + 6.93507
+mpq_rational 256 - 6.90939
+mpq_rational 256 * 12.9674
+mpq_rational 256 / 27.1144
+mpq_rational 256 str 0.00573278
+mpq_rational 256 +(int)0.707818
+mpq_rational 256 -(int)0.719174
+mpq_rational 256 *(int)1.22229
+mpq_rational 256 /(int)1.46082
+mpq_rational 256 construct0.381537
+mpq_rational 256 construct(unsigned)0.390987
+mpq_rational 256 construct(unsigned long long)2.12727
+mpq_rational 256 + 2.4159
+mpq_rational 256 - 2.41594
+mpq_rational 256 * 4.3447
+mpq_rational 256 / 4.43342
+mpq_rational 256 + 2.40187
+mpq_rational 256 - 2.39792
+mpq_rational 256 * 9.51195
+mpq_rational 256 / 9.65697
+mpq_rational 512 + 16.0886
+mpq_rational 512 - 16.1169
+mpq_rational 512 * 29.597
+mpq_rational 512 / 54.8579
+mpq_rational 512 str 0.012222
+mpq_rational 512 +(int)0.812783
+mpq_rational 512 -(int)0.810939
+mpq_rational 512 *(int)1.37678
+mpq_rational 512 /(int)1.6328
+mpq_rational 512 construct0.381355
+mpq_rational 512 construct(unsigned)0.392309
+mpq_rational 512 construct(unsigned long long)2.1179
+mpq_rational 512 + 2.55999
+mpq_rational 512 - 2.52842
+mpq_rational 512 * 4.82251
+mpq_rational 512 / 4.88079
+mpq_rational 512 + 2.5091
+mpq_rational 512 - 2.50572
+mpq_rational 512 * 9.90285
+mpq_rational 512 / 10.0077
+mpq_rational 1024 + 38.8883
+mpq_rational 1024 - 38.9096
+mpq_rational 1024 * 71.0635
+mpq_rational 1024 / 123.985
+mpq_rational 1024 str 0.0291802
+mpq_rational 1024 +(int)0.906471
+mpq_rational 1024 -(int)0.908293
+mpq_rational 1024 *(int)1.52386
+mpq_rational 1024 /(int)1.78575
+mpq_rational 1024 construct0.383461
+mpq_rational 1024 construct(unsigned)0.393504
+mpq_rational 1024 construct(unsigned long long)2.12279
+mpq_rational 1024 + 2.67794
+mpq_rational 1024 - 2.65991
+mpq_rational 1024 * 5.4209
+mpq_rational 1024 / 5.47417
+mpq_rational 1024 + 2.66144
+mpq_rational 1024 - 2.64168
+mpq_rational 1024 * 10.4664
+mpq_rational 1024 / 10.6781
+tommath_int 128 + 0.0222815
+tommath_int 128 - 0.027712
+tommath_int 128 * 0.113094
+tommath_int 128 / 3.09636
+tommath_int 128 str 0.0175165
+tommath_int 128 +(int)0.205506
+tommath_int 128 -(int)0.203148
+tommath_int 128 *(int)0.245897
+tommath_int 128 /(int)2.08045
+tommath_int 128 construct0.207455
+tommath_int 128 construct(unsigned)0.477971
+tommath_int 128 construct(unsigned long long)0.709516
+tommath_int 128 % 3.15171
+tommath_int 128 | 0.153434
+tommath_int 128 & 0.153508
+tommath_int 128 ^ 0.153931
+tommath_int 128 << 0.0408165
+tommath_int 128 >> 0.324163
+tommath_int 128 %(int)2.11648
+tommath_int 128 |(int)0.376671
+tommath_int 128 &(int)0.389144
+tommath_int 128 ^(int)0.374303
+tommath_int 128 gcd 12.5322
+tommath_int 128 + 0.514965
+tommath_int 128 - 0.517555
+tommath_int 128 * 0.607102
+tommath_int 128 / 2.36098
+tommath_int 128 + 0.510608
+tommath_int 128 - 0.520979
+tommath_int 128 * 18.5642
+tommath_int 128 / 1.13357
+tommath_int 256 + 0.0322049
+tommath_int 256 - 0.0407704
+tommath_int 256 * 0.346903
+tommath_int 256 / 4.01311
+tommath_int 256 str 0.0409078
+tommath_int 256 +(int)0.211847
+tommath_int 256 -(int)0.206481
+tommath_int 256 *(int)0.26894
+tommath_int 256 /(int)2.7099
+tommath_int 256 construct0.208012
+tommath_int 256 construct(unsigned)0.470752
+tommath_int 256 construct(unsigned long long)0.709045
+tommath_int 256 % 4.08522
+tommath_int 256 | 0.170093
+tommath_int 256 & 0.176384
+tommath_int 256 ^ 0.172198
+tommath_int 256 << 0.0698155
+tommath_int 256 >> 0.383757
+tommath_int 256 %(int)2.74052
+tommath_int 256 |(int)0.375206
+tommath_int 256 &(int)0.389768
+tommath_int 256 ^(int)0.379255
+tommath_int 256 gcd 26.1755
+tommath_int 256 + 0.530504
+tommath_int 256 - 0.527832
+tommath_int 256 * 0.648438
+tommath_int 256 / 3.16803
+tommath_int 256 + 0.526199
+tommath_int 256 - 0.527479
+tommath_int 256 * 18.624
+tommath_int 256 / 1.1208
+tommath_int 512 + 0.0455267
+tommath_int 512 - 0.0515883
+tommath_int 512 * 0.999026
+tommath_int 512 / 5.95775
+tommath_int 512 str 0.111392
+tommath_int 512 +(int)0.227429
+tommath_int 512 -(int)0.219998
+tommath_int 512 *(int)0.31746
+tommath_int 512 /(int)4.1339
+tommath_int 512 construct0.205622
+tommath_int 512 construct(unsigned)0.473807
+tommath_int 512 construct(unsigned long long)0.703879
+tommath_int 512 % 5.70483
+tommath_int 512 | 0.179084
+tommath_int 512 & 0.182373
+tommath_int 512 ^ 0.183434
+tommath_int 512 << 0.0973643
+tommath_int 512 >> 0.398354
+tommath_int 512 %(int)3.96918
+tommath_int 512 |(int)0.381428
+tommath_int 512 &(int)0.40432
+tommath_int 512 ^(int)0.390434
+tommath_int 512 gcd 56.7747
+tommath_int 512 + 0.546222
+tommath_int 512 - 0.53408
+tommath_int 512 * 0.718764
+tommath_int 512 / 5.07545
+tommath_int 512 + 0.543084
+tommath_int 512 - 0.535411
+tommath_int 512 * 18.745
+tommath_int 512 / 1.15084
+tommath_int 1024 + 0.074223
+tommath_int 1024 - 0.0786205
+tommath_int 1024 * 3.20269
+tommath_int 1024 / 12.7383
+tommath_int 1024 str 0.345861
+tommath_int 1024 +(int)0.250477
+tommath_int 1024 -(int)0.2372
+tommath_int 1024 *(int)0.408933
+tommath_int 1024 /(int)9.04346
+tommath_int 1024 construct0.207377
+tommath_int 1024 construct(unsigned)0.475755
+tommath_int 1024 construct(unsigned long long)0.712949
+tommath_int 1024 % 12.6845
+tommath_int 1024 | 0.436588
+tommath_int 1024 & 0.429721
+tommath_int 1024 ^ 0.429478
+tommath_int 1024 << 0.167289
+tommath_int 1024 >> 0.570323
+tommath_int 1024 %(int)9.09202
+tommath_int 1024 |(int)0.622404
+tommath_int 1024 &(int)0.653128
+tommath_int 1024 ^(int)0.62285
+tommath_int 1024 gcd 132.299
+tommath_int 1024 + 0.578521
+tommath_int 1024 - 0.552649
+tommath_int 1024 * 0.871648
+tommath_int 1024 / 12.2672
+tommath_int 1024 + 0.568301
+tommath_int 1024 - 0.54931
+tommath_int 1024 * 19.0954
+tommath_int 1024 / 1.21165
+cpp_dec_float 50 + 0.0250949
+cpp_dec_float 50 - 0.0264782
+cpp_dec_float 50 * 0.163403
+cpp_dec_float 50 / 3.9502
+cpp_dec_float 50 str 0.0207318
+cpp_dec_float 50 +(int)0.0441266
+cpp_dec_float 50 -(int)0.0442578
+cpp_dec_float 50 *(int)0.234992
+cpp_dec_float 50 /(int)1.81469
+cpp_dec_float 50 construct0.00925753
+cpp_dec_float 50 construct(unsigned)0.0588752
+cpp_dec_float 50 construct(unsigned long long)0.0587691
+cpp_dec_float 50 + 0.0770875
+cpp_dec_float 50 - 0.0741921
+cpp_dec_float 50 * 0.329282
+cpp_dec_float 50 / 1.9701
+cpp_dec_float 50 + 0.0640148
+cpp_dec_float 50 - 0.0643402
+cpp_dec_float 50 * 0.321363
+cpp_dec_float 50 / 1.97464
+cpp_dec_float 100 + 0.0291508
+cpp_dec_float 100 - 0.0307447
+cpp_dec_float 100 * 0.284182
+cpp_dec_float 100 / 7.68823
+cpp_dec_float 100 str 0.0328218
+cpp_dec_float 100 +(int)0.0558389
+cpp_dec_float 100 -(int)0.0563278
+cpp_dec_float 100 *(int)0.460635
+cpp_dec_float 100 /(int)3.62471
+cpp_dec_float 100 construct0.0263234
+cpp_dec_float 100 construct(unsigned)0.0747853
+cpp_dec_float 100 construct(unsigned long long)0.076338
+cpp_dec_float 100 + 0.0845054
+cpp_dec_float 100 - 0.0844193
+cpp_dec_float 100 * 0.582119
+cpp_dec_float 100 / 3.8773
+cpp_dec_float 100 + 0.0708668
+cpp_dec_float 100 - 0.0730765
+cpp_dec_float 100 * 0.574512
+cpp_dec_float 100 / 3.83437
+cpp_dec_float 500 + 0.0630915
+cpp_dec_float 500 - 0.0651113
+cpp_dec_float 500 * 2.22501
+cpp_dec_float 500 / 50.6121
+cpp_dec_float 500 str 0.131293
+cpp_dec_float 500 +(int)0.0935946
+cpp_dec_float 500 -(int)0.0950432
+cpp_dec_float 500 *(int)4.36195
+cpp_dec_float 500 /(int)24.4855
+cpp_dec_float 500 construct0.0306104
+cpp_dec_float 500 construct(unsigned)0.114772
+cpp_dec_float 500 construct(unsigned long long)0.117075
+cpp_dec_float 500 + 0.12407
+cpp_dec_float 500 - 0.122646
+cpp_dec_float 500 * 4.75508
+cpp_dec_float 500 / 25.1602
+cpp_dec_float 500 + 0.0865073
+cpp_dec_float 500 - 0.0929075
+cpp_dec_float 500 * 4.74128
+cpp_dec_float 500 / 25.1175
+mpfr_float 50 + 0.0624318
+mpfr_float 50 - 0.0764497
+mpfr_float 50 * 0.342248
+mpfr_float 50 / 1.69721
+mpfr_float 50 str 0.0289013
+mpfr_float 50 +(int)0.121683
+mpfr_float 50 -(int)0.149605
+mpfr_float 50 *(int)0.1548
+mpfr_float 50 /(int)0.213367
+mpfr_float 50 construct0.214552
+mpfr_float 50 construct(unsigned)0.293892
+mpfr_float 50 construct(unsigned long long)0.638307
+mpfr_float 50 + 0.553442
+mpfr_float 50 - 0.565687
+mpfr_float 50 * 0.841214
+mpfr_float 50 / 1.26072
+mpfr_float 50 + 0.537349
+mpfr_float 50 - 0.561924
+mpfr_float 50 * 0.833423
+mpfr_float 50 / 1.25318
+mpfr_float 100 + 0.0669494
+mpfr_float 100 - 0.0820912
+mpfr_float 100 * 0.478422
+mpfr_float 100 / 2.33995
+mpfr_float 100 str 0.0390764
+mpfr_float 100 +(int)0.117387
+mpfr_float 100 -(int)0.150557
+mpfr_float 100 *(int)0.166496
+mpfr_float 100 /(int)0.267439
+mpfr_float 100 construct0.222594
+mpfr_float 100 construct(unsigned)0.297568
+mpfr_float 100 construct(unsigned long long)0.643108
+mpfr_float 100 + 0.573918
+mpfr_float 100 - 0.592139
+mpfr_float 100 * 0.978674
+mpfr_float 100 / 1.5879
+mpfr_float 100 + 0.561143
+mpfr_float 100 - 0.580528
+mpfr_float 100 * 0.97887
+mpfr_float 100 / 1.58378
+mpfr_float 500 + 0.0817812
+mpfr_float 500 - 0.0975533
+mpfr_float 500 * 3.8308
+mpfr_float 500 / 13.8283
+mpfr_float 500 str 0.156188
+mpfr_float 500 +(int)0.129266
+mpfr_float 500 -(int)0.16446
+mpfr_float 500 *(int)0.273431
+mpfr_float 500 /(int)0.731526
+mpfr_float 500 construct0.222587
+mpfr_float 500 construct(unsigned)0.311108
+mpfr_float 500 construct(unsigned long long)0.653074
+mpfr_float 500 + 0.667956
+mpfr_float 500 - 0.684152
+mpfr_float 500 * 1.2661
+mpfr_float 500 / 7.46167
+mpfr_float 500 + 0.642822
+mpfr_float 500 - 0.65164
+mpfr_float 500 * 1.25714
+mpfr_float 500 / 7.46171
[section:float_performance Float Type Perfomance]
[table Operator *
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][1.09568 (0.292488s)][1.45233 (0.583535s)][1.57476 (5.08004s)]]
-[[gmp_float][[*1] (0.266947s)][[*1] (0.401792s)][[*1] (3.22591s)]]
-[[mpfr_float][1.2445 (0.332216s)][1.14991 (0.462025s)][1.15128 (3.71393s)]]
+[[cpp_dec_float][[*1] (0.321363s)][1.0169 (0.574512s)][6.76401 (4.74128s)]]
+[[gmp_float][1.7169 (0.551747s)][[*1] (0.564962s)][[*1] (0.700957s)]]
+[[mpfr_float][2.5934 (0.833423s)][1.73263 (0.97887s)][1.79346 (1.25714s)]]
]
[table Operator *(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][3.02939 (0.118517s)][4.40051 (0.191461s)][8.93358 (0.736865s)]]
-[[gmp_float][[*1] (0.0391224s)][[*1] (0.0435089s)][[*1] (0.0824826s)]]
-[[mpfr_float][3.8645 (0.151189s)][3.6828 (0.160234s)][3.21855 (0.265474s)]]
+[[cpp_dec_float][5.56675 (0.234992s)][9.32996 (0.460635s)][50.8459 (4.36195s)]]
+[[gmp_float][[*1] (0.0422135s)][[*1] (0.0493716s)][[*1] (0.0857876s)]]
+[[mpfr_float][3.66707 (0.1548s)][3.37231 (0.166496s)][3.1873 (0.273431s)]]
]
[table Operator +
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][[*1] (0.0238412s)][[*1] (0.0293132s)][[*1] (0.0605518s)]]
-[[gmp_float][4.65648 (0.111016s)][3.71451 (0.108884s)][2.36269 (0.143065s)]]
-[[mpfr_float][2.5349 (0.0604351s)][2.22408 (0.0651951s)][1.28374 (0.0777324s)]]
+[[cpp_dec_float][[*1] (0.0640148s)][[*1] (0.0708668s)][[*1] (0.0865073s)]]
+[[gmp_float][7.467 (0.477999s)][6.72671 (0.476701s)][5.67136 (0.490614s)]]
+[[mpfr_float][8.39413 (0.537349s)][7.91828 (0.561143s)][7.43085 (0.642822s)]]
]
[table Operator +(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][1.63035 (0.0522868s)][1.80912 (0.0626744s)][1.85351 (0.105128s)]]
-[[gmp_float][[*1] (0.0320709s)][[*1] (0.0346436s)][[*1] (0.0567182s)]]
-[[mpfr_float][3.33957 (0.107103s)][3.24031 (0.112256s)][2.18567 (0.123967s)]]
+[[cpp_dec_float][1.33358 (0.0441266s)][1.4433 (0.0558389s)][1.44838 (0.0935946s)]]
+[[gmp_float][[*1] (0.0330888s)][[*1] (0.0386882s)][[*1] (0.0646201s)]]
+[[mpfr_float][3.67747 (0.121683s)][3.03419 (0.117387s)][2.00041 (0.129266s)]]
]
[table Operator -
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][[*1] (0.026085s)][[*1] (0.0304546s)][[*1] (0.0625459s)]]
-[[gmp_float][4.58354 (0.119562s)][3.89415 (0.118595s)][2.42105 (0.151427s)]]
-[[mpfr_float][2.82243 (0.073623s)][2.57196 (0.078328s)][1.42895 (0.089375s)]]
+[[cpp_dec_float][[*1] (0.0643402s)][[*1] (0.0730765s)][[*1] (0.0929075s)]]
+[[gmp_float][7.76625 (0.499682s)][6.89067 (0.503546s)][5.89566 (0.547751s)]]
+[[mpfr_float][8.73364 (0.561924s)][7.94411 (0.580528s)][7.01385 (0.65164s)]]
]
[table Operator -(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][[*1] (0.0588879s)][[*1] (0.0638241s)][[*1] (0.113107s)]]
-[[gmp_float][2.21528 (0.130453s)][2.06656 (0.131897s)][1.45214 (0.164247s)]]
-[[mpfr_float][2.3956 (0.141072s)][2.29515 (0.146486s)][1.39903 (0.158239s)]]
+[[cpp_dec_float][[*1] (0.0442578s)][[*1] (0.0563278s)][[*1] (0.0950432s)]]
+[[gmp_float][3.0379 (0.134451s)][2.39847 (0.1351s)][1.86101 (0.176876s)]]
+[[mpfr_float][3.38031 (0.149605s)][2.67288 (0.150557s)][1.73037 (0.16446s)]]
]
[table Operator /
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][3.22921 (3.99158s)][5.04305 (8.1132s)][6.64479 (53.775s)]]
-[[gmp_float][[*1] (1.23608s)][[*1] (1.60879s)][[*1] (8.09281s)]]
-[[mpfr_float][1.33968 (1.65596s)][1.41789 (2.28108s)][1.68098 (13.6039s)]]
+[[cpp_dec_float][2.20938 (1.97464s)][3.71086 (3.83437s)][11.2059 (25.1175s)]]
+[[gmp_float][[*1] (0.893752s)][[*1] (1.03328s)][[*1] (2.24146s)]]
+[[mpfr_float][1.40216 (1.25318s)][1.53276 (1.58378s)][3.32895 (7.46171s)]]
]
[table Operator /(int)
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][1.38197 (0.246362s)][1.74079 (0.412828s)][2.34395 (1.62534s)]]
-[[gmp_float][[*1] (0.178268s)][[*1] (0.23715s)][[*1] (0.693418s)]]
-[[mpfr_float][1.13843 (0.202945s)][1.08131 (0.256434s)][1.02267 (0.709137s)]]
+[[cpp_dec_float][10.0596 (1.81469s)][15.5048 (3.62471s)][34.4767 (24.4855s)]]
+[[gmp_float][[*1] (0.180393s)][[*1] (0.23378s)][[*1] (0.710204s)]]
+[[mpfr_float][1.18279 (0.213367s)][1.14398 (0.267439s)][1.03002 (0.731526s)]]
+]
+[table Operator construct
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.00925753s)][[*1] (0.0263234s)][[*1] (0.0306104s)]]
+[[gmp_float][21.32 (0.19737s)][7.4686 (0.196599s)][6.73181 (0.206063s)]]
+[[mpfr_float][23.176 (0.214552s)][8.45613 (0.222594s)][7.27162 (0.222587s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0587691s)][[*1] (0.076338s)][[*1] (0.117075s)]]
+[[gmp_float][8.84863 (0.520025s)][6.80343 (0.51936s)][4.59554 (0.538021s)]]
+[[mpfr_float][10.8613 (0.638307s)][8.42448 (0.643108s)][5.57826 (0.653074s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0588752s)][[*1] (0.0747853s)][[*1] (0.114772s)]]
+[[gmp_float][3.53421 (0.208078s)][2.76875 (0.207062s)][1.89088 (0.217019s)]]
+[[mpfr_float][4.99178 (0.293892s)][3.97896 (0.297568s)][2.71067 (0.311108s)]]
]
[table Operator str
[[Backend][50 Bits][100 Bits][500 Bits]]
-[[cpp_dec_float][[*1] (0.0185371s)][1.53356 (0.0318154s)][[*1] (0.131303s)]]
-[[gmp_float][1.61743 (0.0299824s)][[*1] (0.0207461s)][1.03767 (0.136249s)]]
-[[mpfr_float][1.57977 (0.0292843s)][1.82886 (0.0379418s)][1.19134 (0.156426s)]]
+[[cpp_dec_float][1.5616 (0.0207318s)][1.61725 (0.0328218s)][[*1] (0.131293s)]]
+[[gmp_float][[*1] (0.013276s)][[*1] (0.0202949s)][1.07517 (0.141162s)]]
+[[mpfr_float][2.17696 (0.0289013s)][1.92543 (0.0390764s)][1.18962 (0.156188s)]]
]
[endsect]
[section:integer_performance Integer Type Perfomance]
[table Operator %
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][2.52964 (0.488484s)][1.9024 (0.597931s)][1.57549 (0.807811s)][1.31477 (1.24204s)]]
-[[cpp_int(fixed)][[*1] (0.193104s)][[*1] (0.314303s)][[*1] (0.512737s)][[*1] (0.944678s)]]
-[[gmp_int][3.24303 (0.626244s)][2.18285 (0.686075s)][1.54555 (0.792461s)][1.0841 (1.02412s)]]
-[[tommath_int][14.8026 (2.85844s)][9.7177 (3.05431s)][9.06266 (4.64676s)][11.9304 (11.2704s)]]
+[[cpp_int][5.31184 (0.37333s)][1.99944e+236 (0.673748s)][2.08204e+236 (0.701584s)][3.39405e+236 (1.14369s)]]
+[[cpp_int(fixed)][1.10616 (0.0777437s)][5.8492e+235 (0.1971s)][9.91271e+235 (0.334027s)][1.60165e+236 (0.539708s)][-1.#INF (0.94847s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0702826s)]]
+[[gmp_int][9.12715 (0.64148s)][2.088e+236 (0.703592s)][2.43295e+236 (0.819828s)][3.02578e+236 (1.01959s)]]
+[[tommath_int][44.8434 (3.15171s)][1.21234e+237 (4.08522s)][1.69298e+237 (5.70483s)][3.7643e+237 (12.6845s)]]
]
[table Operator %(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][3.57875 (0.197942s)][2.99222 (0.298382s)][2.60748 (0.478772s)][2.42374 (0.85137s)]]
-[[cpp_int(fixed)][2.01994 (0.111723s)][2.085 (0.207915s)][2.10772 (0.38701s)][2.16437 (0.760262s)]]
-[[gmp_int][[*1] (0.0553103s)][[*1] (0.0997194s)][[*1] (0.183615s)][[*1] (0.351263s)]]
-[[tommath_int][32.4149 (1.79288s)][22.0249 (2.19631s)][18.7297 (3.43906s)][24.0777 (8.45761s)]]
+[[cpp_int][3.51789 (0.104856s)][-1.#INF (0.203012s)][-1.#INF (0.391566s)][-1.#INF (0.768511s)]]
+[[cpp_int(fixed)][1.14548 (0.0341425s)][-1.#INF (0.103684s)][-1.#INF (0.200647s)][-1.#INF (0.377704s)][-1.#INF (0.743202s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0298064s)]]
+[[gmp_int][1.91945 (0.0572117s)][-1.#INF (0.10258s)][-1.#INF (0.188529s)][-1.#INF (0.355222s)]]
+[[tommath_int][71.0078 (2.11648s)][-1.#INF (2.74052s)][-1.#INF (3.96918s)][-1.#INF (9.09202s)]]
]
[table Operator &
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.27651 (0.0299046s)][1.44553 (0.0389208s)][1.51976 (0.04981s)][1.48214 (0.0745785s)]]
-[[cpp_int(fixed)][[*1] (0.0234269s)][[*1] (0.026925s)][[*1] (0.032775s)][[*1] (0.0503183s)]]
-[[gmp_int][2.26238 (0.0530007s)][2.44171 (0.0657431s)][2.77722 (0.0910233s)][2.94472 (0.148173s)]]
-[[tommath_int][5.60505 (0.131309s)][5.56001 (0.149703s)][4.72526 (0.15487s)][8.2919 (0.417234s)]]
+[[cpp_int][12.079 (0.031605s)][-1.11772e+007 (0.0455929s)][-1.33961e+007 (0.0546439s)][-2.06875e+007 (0.0843863s)]]
+[[cpp_int(fixed)][4.74538 (0.0124165s)][-8.36978e+006 (0.0341411s)][-1.22854e+007 (0.0501131s)][-1.4424e+007 (0.0588367s)][-1.#INF (0.0774574s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00261653s)]]
+[[gmp_int][20.5664 (0.0538128s)][-1.59881e+007 (0.0652169s)][-2.25796e+007 (0.092104s)][-3.5403e+007 (0.144412s)]]
+[[tommath_int][58.6685 (0.153508s)][-4.3241e+007 (0.176384s)][-4.47093e+007 (0.182373s)][-1.05347e+008 (0.429721s)]]
]
[table Operator &(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.64349 (0.0463351s)][1.34507 (0.0550224s)][1.29371 (0.0697964s)][1.17854 (0.101779s)]]
-[[cpp_int(fixed)][[*1] (0.0281931s)][[*1] (0.0409067s)][[*1] (0.0539505s)][[*1] (0.0863606s)]]
-[[gmp_int][5.204 (0.146717s)][3.63933 (0.148873s)][2.85915 (0.154253s)][1.8967 (0.163801s)]]
-[[tommath_int][12.0738 (0.340397s)][8.67273 (0.354773s)][6.75845 (0.364622s)][7.1076 (0.613817s)]]
+[[cpp_int][23.3956 (0.0377678s)][-7.85844e+307 (0.0471524s)][-1.07843e+308 (0.0647085s)][-1.68143e+308 (0.10089s)]]
+[[cpp_int(fixed)][6.49083 (0.0104782s)][-6.95612e+307 (0.0417383s)][-8.99012e+307 (0.0539427s)][-1.17371e+308 (0.070425s)][-1.#INF (0.112823s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00161431s)]]
+[[gmp_int][87.5331 (0.141306s)][-1.#INF (0.139398s)][-1.#INF (0.142498s)][-1.#INF (0.141249s)]]
+[[tommath_int][241.059 (0.389144s)][-1.#INF (0.389768s)][-1.#INF (0.40432s)][-1.#INF (0.653128s)]]
]
[table Operator *
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.36344 (0.0764199s)][1.50698 (0.193581s)][1.41904 (0.656832s)][1.6399 (2.47851s)]]
-[[cpp_int(fixed)][[*1] (0.0560495s)][1.26247 (0.162173s)][[*1] (0.462871s)][1.06665 (1.61211s)]]
-[[gmp_int][1.20183 (0.0673622s)][[*1] (0.128456s)][1.11903 (0.517967s)][[*1] (1.51138s)]]
-[[tommath_int][1.99157 (0.111627s)][2.64312 (0.339525s)][2.10438 (0.974058s)][2.0631 (3.11813s)]]
+[[cpp_int][1715.93 (7.6372s)][-4.15607e+276 (7.7121s)][-4.16472e+276 (7.72815s)][-4.23791e+276 (7.86395s)]]
+[[cpp_int(fixed)][1.27579 (0.00567824s)][-3.62916e+274 (0.0673436s)][-5.78275e+274 (0.107306s)][-9.2595e+274 (0.171821s)][-1.#INF (0.299236s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00445077s)]]
+[[gmp_int][710.595 (3.1627s)][-1.69816e+276 (3.15114s)][-1.70883e+276 (3.17094s)][-1.7293e+276 (3.20893s)]]
+[[tommath_int][4171.01 (18.5642s)][-1.00365e+277 (18.624s)][-1.01017e+277 (18.745s)][-1.02906e+277 (19.0954s)]]
]
[table Operator *(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.35944 (0.0306376s)][1.54828 (0.040404s)][1.60013 (0.0537717s)][1.62199 (0.0790137s)]]
-[[cpp_int(fixed)][1.28804 (0.0290285s)][1.54595 (0.0403434s)][1.61453 (0.0542558s)][1.69566 (0.0826023s)]]
-[[gmp_int][[*1] (0.0225369s)][[*1] (0.0260961s)][[*1] (0.0336047s)][[*1] (0.0487139s)]]
-[[tommath_int][10.5972 (0.238829s)][10.4554 (0.272846s)][9.6853 (0.325472s)][8.5224 (0.41516s)]]
+[[cpp_int][9.97316 (0.0235876s)][1.#INF (0.0318939s)][1.#INF (0.0427792s)][1.#INF (0.0668616s)]]
+[[cpp_int(fixed)][2.32007 (0.00548722s)][1.#INF (0.0328109s)][1.#INF (0.049867s)][1.#INF (0.0658566s)][-1.#INF (0.0948565s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00236511s)]]
+[[gmp_int][9.62157 (0.022756s)][1.#INF (0.0282672s)][1.#INF (0.0361075s)][1.#INF (0.0518882s)]]
+[[tommath_int][103.969 (0.245897s)][1.#INF (0.26894s)][1.#INF (0.31746s)][1.#INF (0.408933s)]]
]
[table Operator +
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.24954 (0.0271391s)][1.12545 (0.0354288s)][1.26716 (0.0536949s)][1.34112 (0.0884854s)]]
-[[cpp_int(fixed)][1.06795 (0.023195s)][1.0057 (0.0316591s)][1.21714 (0.0515755s)][1.26263 (0.0833072s)]]
-[[gmp_int][1.91685 (0.0416325s)][1.38884 (0.0437202s)][1.18481 (0.0502054s)][[*1] (0.065979s)]]
-[[tommath_int][[*1] (0.0217192s)][[*1] (0.0314797s)][[*1] (0.0423742s)][1.09807 (0.0724498s)]]
+[[cpp_int][9.74543 (0.0196594s)][3.98952e+276 (0.0215291s)][4.2355e+276 (0.0228565s)][4.21393e+276 (0.0227402s)]]
+[[cpp_int(fixed)][2.13187 (0.00430062s)][3.11951e+276 (0.0168342s)][3.15933e+276 (0.0170491s)][3.19893e+276 (0.0172628s)][-1.#INF (0.0181245s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0020173s)]]
+[[gmp_int][337.759 (0.68136s)][1.27731e+278 (0.68929s)][1.28647e+278 (0.694235s)][1.27865e+278 (0.690013s)]]
+[[tommath_int][253.115 (0.510608s)][9.75089e+277 (0.526199s)][1.00638e+278 (0.543084s)][1.05311e+278 (0.568301s)]]
]
[table Operator +(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.48302 (0.0203604s)][1.21971 (0.0238597s)][1.2383 (0.0262742s)][1.03442 (0.0296193s)]]
-[[cpp_int(fixed)][[*1] (0.013729s)][[*1] (0.0195617s)][[*1] (0.0212179s)][[*1] (0.0286337s)]]
-[[gmp_int][2.16569 (0.0297328s)][2.15606 (0.0421762s)][3.05447 (0.0648096s)][3.67481 (0.105223s)]]
-[[tommath_int][18.7291 (0.257132s)][14.1384 (0.27657s)][13.8483 (0.293832s)][11.5132 (0.329666s)]]
+[[cpp_int][9.81588 (0.0159069s)][-5.71737e+244 (0.0218386s)][-8.2882e+244 (0.0316584s)][-1.1265e+245 (0.0430289s)]]
+[[cpp_int(fixed)][3.92617 (0.00636247s)][-7.02443e+244 (0.0268311s)][-1.07535e+245 (0.0410749s)][-1.37293e+245 (0.0524416s)][-1.#INF (0.0728817s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00162053s)]]
+[[gmp_int][19.2059 (0.0311237s)][-1.12054e+245 (0.0428011s)][-1.74239e+245 (0.0665539s)][-2.83458e+245 (0.108272s)]]
+[[tommath_int][126.815 (0.205506s)][-5.54618e+245 (0.211847s)][-5.95413e+245 (0.227429s)][-6.55751e+245 (0.250477s)]]
]
[table Operator -
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.1816 (0.0302204s)][[*1] (0.03826s)][1.11566 (0.0529947s)][1.17049 (0.0822931s)]]
-[[cpp_int(fixed)][[*1] (0.0255758s)][1.01186 (0.0387139s)][[*1] (0.0475007s)][1.22939 (0.0864345s)]]
-[[gmp_int][1.60126 (0.0409536s)][1.17441 (0.0449331s)][1.12969 (0.053661s)][[*1] (0.0703067s)]]
-[[tommath_int][1.14132 (0.0291902s)][1.03846 (0.0397314s)][1.09534 (0.0520296s)][1.10104 (0.0774105s)]]
+[[cpp_int][11.0409 (0.0210968s)][3.86227e+276 (0.0213343s)][4.03471e+276 (0.0222868s)][4.24576e+276 (0.0234526s)]]
+[[cpp_int(fixed)][2.02836 (0.00387577s)][3.06763e+276 (0.0169449s)][3.2004e+276 (0.0176783s)][3.27232e+276 (0.0180756s)][-1.#INF (0.0190581s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00191079s)]]
+[[gmp_int][356.496 (0.681187s)][1.23744e+278 (0.683532s)][1.2536e+278 (0.69246s)][1.25066e+278 (0.690838s)]]
+[[tommath_int][272.651 (0.520979s)][9.54925e+277 (0.527479s)][9.69283e+277 (0.535411s)][9.94446e+277 (0.54931s)]]
]
[table Operator -(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.49712 (0.0155424s)][1.3004 (0.0199724s)][1.2442 (0.0223562s)][1.12422 (0.0246399s)]]
-[[cpp_int(fixed)][[*1] (0.0103816s)][[*1] (0.0153586s)][[*1] (0.0179683s)][[*1] (0.0219173s)]]
-[[gmp_int][2.85673 (0.0296573s)][2.55469 (0.0392365s)][3.22576 (0.0579614s)][4.55088 (0.0997431s)]]
-[[tommath_int][19.5977 (0.203455s)][14.2166 (0.218347s)][12.9406 (0.23252s)][11.9263 (0.261392s)]]
+[[cpp_int][9.24378 (0.0151244s)][-1.01975e-199 (0.017199s)][-1.47092e-199 (0.0248084s)][-1.96387e-199 (0.0331224s)]]
+[[cpp_int(fixed)][4.08494 (0.00668367s)][-1.43394e-199 (0.0241848s)][-2.18373e-199 (0.0368306s)][-2.98469e-199 (0.0503396s)][-1.#INF (0.0621059s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00163617s)]]
+[[gmp_int][18.693 (0.030585s)][-2.37422e-199 (0.0400434s)][-3.42818e-199 (0.0578194s)][-5.96116e-199 (0.100541s)]]
+[[tommath_int][124.161 (0.203148s)][-1.22425e-198 (0.206481s)][-1.30439e-198 (0.219998s)][-1.40639e-198 (0.2372s)]]
]
[table Operator /
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][2.9558 (0.601063s)][2.21555 (0.694115s)][1.73066 (0.915068s)][1.41604 (1.36697s)]]
-[[cpp_int(fixed)][[*1] (0.20335s)][[*1] (0.313292s)][[*1] (0.52874s)][[*1] (0.965347s)]]
-[[gmp_int][4.08359 (0.8304s)][2.91 (0.91168s)][1.97009 (1.04166s)][1.30934 (1.26397s)]]
-[[tommath_int][10.2514 (2.08463s)][9.26794 (2.90357s)][8.62079 (4.55815s)][11.6636 (11.2594s)]]
+[[cpp_int][1.96346 (0.0578293s)][-1.51814e+061 (0.0615507s)][-1.8062e+061 (0.0732298s)][-3.04778e+061 (0.123568s)]]
+[[cpp_int(fixed)][1.08704 (0.0320162s)][-8.07606e+060 (0.0327432s)][-8.40351e+060 (0.0340708s)][-1.09735e+061 (0.0444905s)][-1.#INF (0.106788s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0294528s)]]
+[[gmp_int][23.2741 (0.685487s)][-1.70068e+062 (0.689516s)][-1.6994e+062 (0.688995s)][-1.74523e+062 (0.707578s)]]
+[[tommath_int][38.4876 (1.13357s)][-2.76443e+062 (1.1208s)][-2.83854e+062 (1.15084s)][-2.98853e+062 (1.21165s)]]
]
[table Operator /(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][5.83613 (0.318461s)][4.26769 (0.433035s)][3.39803 (0.641615s)][2.80387 (1.05122s)]]
-[[cpp_int(fixed)][2.46673 (0.134603s)][2.52386 (0.256092s)][2.43318 (0.459431s)][2.28165 (0.855435s)]]
-[[gmp_int][[*1] (0.0545672s)][[*1] (0.101468s)][[*1] (0.18882s)][[*1] (0.374919s)]]
-[[tommath_int][29.1556 (1.59094s)][21.9806 (2.23033s)][18.2745 (3.45058s)][22.3582 (8.38249s)]]
+[[cpp_int][7.87676 (0.235955s)][1.#INF (0.35212s)][1.#INF (0.568032s)][1.#INF (0.989885s)]]
+[[cpp_int(fixed)][1.21173 (0.0362985s)][1.#INF (0.137619s)][1.#INF (0.253796s)][1.#INF (0.446782s)][-1.#INF (0.84764s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0299559s)]]
+[[gmp_int][1.87075 (0.0560401s)][1.#INF (0.0982823s)][1.#INF (0.183564s)][1.#INF (0.352238s)]]
+[[tommath_int][69.4504 (2.08045s)][1.#INF (2.7099s)][1.#INF (4.1339s)][1.#INF (9.04346s)]]
]
[table Operator <<
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.1596 (0.0220286s)][1.11929 (0.0294239s)][1.15296 (0.0365532s)][1.06891 (0.0522035s)]]
-[[cpp_int(fixed)][[*1] (0.0189966s)][[*1] (0.0262879s)][[*1] (0.0317039s)][[*1] (0.0488381s)]]
-[[gmp_int][1.36896 (0.0260055s)][1.17593 (0.0309127s)][1.51661 (0.0480825s)][1.43853 (0.0702549s)]]
-[[tommath_int][2.11378 (0.0401547s)][2.52576 (0.0663968s)][2.96051 (0.0938596s)][3.31171 (0.161738s)]]
+[[cpp_int][15.849 (0.0256107s)][-5.85461e+126 (0.0401135s)][-6.36621e+126 (0.0436188s)][-9.17366e+126 (0.0628544s)]]
+[[cpp_int(fixed)][3.19639 (0.00516511s)][-4.68379e+126 (0.0320915s)][-7.40049e+126 (0.0507053s)][-8.72078e+126 (0.0597514s)][-1.#INF (0.0677088s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00161592s)]]
+[[gmp_int][16.956 (0.0273994s)][-4.66649e+126 (0.031973s)][-6.88464e+126 (0.0471709s)][-1.05374e+127 (0.0721984s)]]
+[[tommath_int][25.259 (0.0408165s)][-1.01897e+127 (0.0698155s)][-1.42104e+127 (0.0973643s)][-2.4416e+127 (0.167289s)]]
]
[table Operator >>
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.26962 (0.0208765s)][1.19206 (0.0265325s)][1.10665 (0.0304931s)][1.03429 (0.0383751s)]]
-[[cpp_int(fixed)][[*1] (0.0164431s)][[*1] (0.0222577s)][[*1] (0.0275545s)][1.02967 (0.0382038s)]]
-[[gmp_int][1.67276 (0.0275053s)][1.30139 (0.028966s)][1.17546 (0.0323891s)][[*1] (0.037103s)]]
-[[tommath_int][14.0947 (0.23176s)][11.7344 (0.261181s)][10.5175 (0.289806s)][13.3498 (0.495316s)]]
+[[cpp_int][14.6983 (0.0237523s)][-2.28921e+307 (0.0302534s)][-2.68808e+307 (0.0355247s)][-3.38364e+307 (0.044717s)]]
+[[cpp_int(fixed)][2.47217 (0.00399499s)][-2.21749e+307 (0.0293055s)][-2.9515e+307 (0.039006s)][-3.9023e+307 (0.0515714s)][-1.#INF (0.0626121s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00161599s)]]
+[[gmp_int][17.8366 (0.0288237s)][-2.3471e+307 (0.0310184s)][-2.55387e+307 (0.0337511s)][-2.9362e+307 (0.0388038s)]]
+[[tommath_int][200.597 (0.324163s)][-1.#INF (0.383757s)][-1.#INF (0.398354s)][-1.#INF (0.570323s)]]
]
[table Operator ^
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.39932 (0.0300509s)][1.28371 (0.0381634s)][1.25304 (0.0494246s)][1.04238 (0.075182s)]]
-[[cpp_int(fixed)][[*1] (0.0214753s)][[*1] (0.0297291s)][[*1] (0.0394438s)][[*1] (0.0721252s)]]
-[[gmp_int][2.26098 (0.0485553s)][2.11331 (0.0628266s)][2.1917 (0.086449s)][1.89072 (0.136369s)]]
-[[tommath_int][6.08557 (0.130689s)][4.84167 (0.143938s)][3.82246 (0.150772s)][5.8133 (0.419285s)]]
+[[cpp_int][7.95372 (0.0318172s)][1.21131 (0.0425243s)][1.02246 (0.0542436s)][1.19877 (0.08333s)]]
+[[cpp_int(fixed)][2.75762 (0.0110313s)][[*1] (0.0351059s)][[*1] (0.0530521s)][[*1] (0.0695132s)][-1.#INF (0.09783s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0040003s)]]
+[[gmp_int][12.4289 (0.0497194s)][1.79507 (0.0630174s)][1.63955 (0.0869819s)][2.0012 (0.139109s)]]
+[[tommath_int][38.4798 (0.153931s)][4.9051 (0.172198s)][3.45761 (0.183434s)][6.17837 (0.429478s)]]
]
[table Operator ^(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.85734 (0.0381023s)][1.66156 (0.0432356s)][1.51413 (0.0466764s)][1.28122 (0.0550852s)]]
-[[cpp_int(fixed)][[*1] (0.0205145s)][[*1] (0.0260211s)][[*1] (0.0308272s)][[*1] (0.0429944s)]]
-[[gmp_int][6.89492 (0.141446s)][5.58265 (0.145267s)][5.07065 (0.156314s)][3.68095 (0.15826s)]]
-[[tommath_int][16.3846 (0.336121s)][12.9631 (0.337315s)][11.2716 (0.347472s)][13.6661 (0.587566s)]]
+[[cpp_int][15.3547 (0.0283305s)][-8.92021e+307 (0.0353555s)][-1.05356e+308 (0.041758s)][-1.35819e+308 (0.0538323s)]]
+[[cpp_int(fixed)][5.81005 (0.0107199s)][-7.88073e+307 (0.0312355s)][-1.20328e+308 (0.0476923s)][-1.36485e+308 (0.0540962s)][-1.#INF (0.0806317s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00184507s)]]
+[[gmp_int][78.0102 (0.143934s)][-1.#INF (0.144825s)][-1.#INF (0.152773s)][-1.#INF (0.161662s)]]
+[[tommath_int][202.867 (0.374303s)][-1.#INF (0.379255s)][-1.#INF (0.390434s)][-1.#INF (0.62285s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.64088 (0.00293927s)][1.47161e+238 (0.00277479s)][1.49039e+238 (0.0028102s)][1.47064e+238 (0.00277298s)]]
+[[cpp_int(fixed)][1.45325 (0.00161745s)][8.73297e+237 (0.00164665s)][1.92709e+238 (0.00363363s)][3.0576e+238 (0.00576526s)][-1.#INF (0.00535599s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00111299s)]]
+[[gmp_int][176.266 (0.196182s)][1.06706e+240 (0.201199s)][1.04919e+240 (0.19783s)][1.04712e+240 (0.19744s)]]
+[[tommath_int][186.394 (0.207455s)][1.10319e+240 (0.208012s)][1.09052e+240 (0.205622s)][1.09982e+240 (0.207377s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][3.51152 (0.00719854s)][-2.80497e-148 (0.00725455s)][-2.79893e-148 (0.00723891s)][-2.83336e-148 (0.00732796s)]]
+[[cpp_int(fixed)][[*1] (0.00204998s)][-1.21019e-148 (0.00312994s)][-1.50065e-148 (0.00388115s)][-2.15185e-148 (0.00556537s)][-1.#INF (0.00577713s)]]
+[[cpp_int(unsigned, fixed)][1.17501 (0.00240876s)]]
+[[gmp_int][351.097 (0.719741s)][-2.82056e-146 (0.729487s)][-2.80186e-146 (0.724649s)][-2.79263e-146 (0.722262s)]]
+[[tommath_int][346.109 (0.709516s)][-2.74152e-146 (0.709045s)][-2.72155e-146 (0.703879s)][-2.75662e-146 (0.712949s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.44987 (0.00270684s)][1.90974 (0.0030529s)][[*1] (0.00288857s)][[*1] (0.00265201s)]]
+[[cpp_int(fixed)][1.89292 (0.00209147s)][[*1] (0.0015986s)][1.28253 (0.00370466s)][2.19414 (0.0058189s)][-1.#INF (0.00836042s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00110489s)]]
+[[gmp_int][186.546 (0.206113s)][132.175 (0.211295s)][71.6424 (0.206944s)][81.5339 (0.216229s)]]
+[[tommath_int][432.596 (0.477971s)][294.478 (0.470752s)][164.029 (0.473807s)][179.394 (0.475755s)]]
]
[table Operator gcd
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.82307 (4.48165s)][1.77052 (10.1686s)][1.8655 (25.1877s)][2.12367 (69.0626s)]]
-[[cpp_int(fixed)][1.504 (3.69729s)][1.60631 (9.22552s)][1.84155 (24.8643s)][2.25807 (73.4335s)]]
-[[gmp_int][[*1] (2.4583s)][[*1] (5.7433s)][[*1] (13.5018s)][[*1] (32.5205s)]]
-[[tommath_int][4.92412 (12.105s)][4.39462 (25.2396s)][4.05657 (54.7712s)][3.96001 (128.781s)]]
+[[cpp_int][8.27321 (4.98644s)][-1.#INF (11.1816s)][-1.#INF (27.2257s)][-1.#INF (73.3735s)]]
+[[cpp_int(fixed)][1.0026 (0.604291s)][-1.#INF (4.18006s)][-1.#INF (10.2671s)][-1.#INF (26.2762s)][-1.#INF (76.2849s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.602722s)]]
+[[gmp_int][4.06647 (2.45095s)][-1.#INF (5.89505s)][-1.#INF (13.6993s)][-1.#INF (33.2232s)]]
+[[tommath_int][20.7927 (12.5322s)][-1.#INF (26.1755s)][-1.#INF (56.7747s)][-1.#INF (132.299s)]]
]
[table Operator str
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.73678 (0.00186546s)][1.442 (0.00327905s)][1.29994 (0.0076685s)][1.49716 (0.0217405s)]]
-[[cpp_int(fixed)][[*1] (0.00107409s)][[*1] (0.00227396s)][1.01222 (0.00597122s)][1.20506 (0.0174989s)]]
-[[gmp_int][1.8827 (0.00202218s)][1.28861 (0.00293026s)][[*1] (0.00589914s)][[*1] (0.0145211s)]]
-[[tommath_int][15.6431 (0.0168021s)][22.3011 (0.0507118s)][20.9541 (0.123612s)][26.2052 (0.380528s)]]
+[[cpp_int][1.02246 (0.00189808s)][-3.42215e+178 (0.00391656s)][-7.26989e+178 (0.00832019s)][-1.93625e+179 (0.0221599s)]]
+[[cpp_int(fixed)][1.35564 (0.00251659s)][-1.36421e+178 (0.0015613s)][-2.59752e+178 (0.00297279s)][-6.18963e+178 (0.00708386s)][-1.#INF (0.0172514s)]]
+[[cpp_int(unsigned, fixed)][1.38149 (0.00256457s)]]
+[[gmp_int][[*1] (0.00185638s)][-3.01078e+178 (0.00344576s)][-5.40339e+178 (0.00618403s)][-1.26279e+179 (0.0144523s)]]
+[[tommath_int][9.43586 (0.0175165s)][-3.57438e+179 (0.0409078s)][-9.73304e+179 (0.111392s)][-3.02201e+180 (0.345861s)]]
]
[table Operator |
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.39649 (0.0295702s)][1.14915 (0.0378751s)][1.31606 (0.0523944s)][1.04853 (0.0751774s)]]
-[[cpp_int(fixed)][[*1] (0.0211746s)][[*1] (0.0329594s)][[*1] (0.0398115s)][[*1] (0.071698s)]]
-[[gmp_int][2.31998 (0.0491246s)][1.83801 (0.0605797s)][2.16567 (0.0862186s)][1.88132 (0.134887s)]]
-[[tommath_int][6.12227 (0.129637s)][4.26647 (0.14062s)][3.75956 (0.149674s)][5.78233 (0.414581s)]]
+[[cpp_int][11.6542 (0.030991s)][-6.48076e+046 (0.0429658s)][-8.11261e+046 (0.0537846s)][-1.24844e+047 (0.0827684s)]]
+[[cpp_int(fixed)][4.09831 (0.0108982s)][-5.73378e+046 (0.0380136s)][-7.98794e+046 (0.0529581s)][-1.02098e+047 (0.0676884s)][-1.#INF (0.100936s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00265921s)]]
+[[gmp_int][17.8503 (0.0474678s)][-9.32586e+046 (0.0618281s)][-1.29209e+047 (0.0856626s)][-2.0526e+047 (0.136082s)]]
+[[tommath_int][57.6991 (0.153434s)][-2.5656e+047 (0.170093s)][-2.70121e+047 (0.179084s)][-6.58529e+047 (0.436588s)]]
]
[table Operator |(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_int][1.89501 (0.0385046s)][1.64437 (0.0425891s)][1.56631 (0.0479629s)][1.28806 (0.0549147s)]]
-[[cpp_int(fixed)][[*1] (0.020319s)][[*1] (0.0258999s)][[*1] (0.0306217s)][[*1] (0.0426336s)]]
-[[gmp_int][6.93537 (0.14092s)][5.48104 (0.141959s)][4.90595 (0.150229s)][3.63885 (0.155137s)]]
-[[tommath_int][16.4913 (0.335087s)][13.3178 (0.344931s)][11.4509 (0.350645s)][13.7699 (0.587063s)]]
+[[cpp_int][16.9457 (0.0280516s)][-4.17523e+307 (0.0363929s)][-4.79721e+307 (0.0418143s)][-6.04694e+307 (0.0527075s)]]
+[[cpp_int(fixed)][6.70551 (0.0111002s)][-3.64663e+307 (0.0317854s)][-5.35725e+307 (0.0466958s)][-6.16052e+307 (0.0536974s)][-1.#INF (0.0819107s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00165538s)]]
+[[gmp_int][85.2488 (0.141119s)][-1.64044e+308 (0.142987s)][-1.78579e+308 (0.155656s)][-1.#INF (0.163236s)]]
+[[tommath_int][227.544 (0.376671s)][-1.#INF (0.375206s)][-1.#INF (0.381428s)][-1.#INF (0.622404s)]]
]
[endsect]
[section:rational_performance Rational Type Perfomance]
[table Operator *
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.59286 (32.3559s)][6.54125 (82.4247s)][6.8815 (197.198s)][6.84066 (473.057s)]]
-[[mpq_rational][[*1] (5.78521s)][[*1] (12.6008s)][[*1] (28.6562s)][[*1] (69.1537s)]]
+[[cpp_rational][6.20279 (57.9393s)][6.23608 (59.3172s)][6.25071 (61.8998s)][6.44097 (67.4139s)]]
+[[mpq_rational][[*1] (9.34086s)][[*1] (9.51195s)][[*1] (9.90285s)][[*1] (10.4664s)]]
]
[table Operator *(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][2.70193 (3.1466s)][3.10134 (3.79056s)][3.659 (4.93935s)][4.61372 (6.89845s)]]
-[[mpq_rational][[*1] (1.16457s)][[*1] (1.22223s)][[*1] (1.34992s)][[*1] (1.4952s)]]
+[[cpp_rational][2.06502 (2.4377s)][2.38344 (2.91325s)][2.86734 (3.94768s)][3.8554 (5.87507s)]]
+[[mpq_rational][[*1] (1.18047s)][[*1] (1.22229s)][[*1] (1.37678s)][[*1] (1.52386s)]]
]
[table Operator +
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.91758 (18.1263s)][6.60754 (44.1182s)][6.65334 (103.169s)][6.44717 (244.055s)]]
-[[mpq_rational][[*1] (3.06312s)][[*1] (6.67695s)][[*1] (15.5064s)][[*1] (37.8546s)]]
+[[cpp_rational][1.1513 (2.68363s)][1.31207 (3.15142s)][1.61685 (4.05684s)][2.18092 (5.80438s)]]
+[[mpq_rational][[*1] (2.33097s)][[*1] (2.40187s)][[*1] (2.5091s)][[*1] (2.66144s)]]
]
[table Operator +(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][3.98512 (2.67249s)][4.24335 (3.04309s)][4.65009 (3.83046s)][5.45832 (5.08346s)]]
-[[mpq_rational][[*1] (0.670618s)][[*1] (0.717144s)][[*1] (0.823739s)][[*1] (0.931322s)]]
+[[cpp_rational][3.69962 (2.47739s)][4.12788 (2.92179s)][4.67839 (3.80252s)][6.08526 (5.51612s)]]
+[[mpq_rational][[*1] (0.669634s)][[*1] (0.707818s)][[*1] (0.812783s)][[*1] (0.906471s)]]
]
[table Operator -
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.91504 (18.2374s)][6.55676 (43.8659s)][6.66239 (103.481s)][6.47224 (244.887s)]]
-[[mpq_rational][[*1] (3.08322s)][[*1] (6.69018s)][[*1] (15.5321s)][[*1] (37.8365s)]]
+[[cpp_rational][1.17746 (2.72926s)][1.334 (3.19882s)][1.63017 (4.08474s)][2.21829 (5.86s)]]
+[[mpq_rational][[*1] (2.31793s)][[*1] (2.39792s)][[*1] (2.50572s)][[*1] (2.64168s)]]
]
[table Operator -(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][3.96173 (2.66785s)][4.36532 (3.09023s)][4.59363 (3.74494s)][5.43075 (5.09156s)]]
-[[mpq_rational][[*1] (0.673405s)][[*1] (0.707904s)][[*1] (0.815246s)][[*1] (0.937541s)]]
+[[cpp_rational][3.71756 (2.47959s)][4.04045 (2.90579s)][4.69474 (3.80714s)][6.07677 (5.51949s)]]
+[[mpq_rational][[*1] (0.666993s)][[*1] (0.719174s)][[*1] (0.810939s)][[*1] (0.908293s)]]
]
[table Operator /
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][4.36846 (63.9498s)][5.52565 (145.045s)][6.18331 (328.069s)][6.49822 (784.806s)]]
-[[mpq_rational][[*1] (14.639s)][[*1] (26.2494s)][[*1] (53.0571s)][[*1] (120.772s)]]
+[[cpp_rational][5.95741 (58.0332s)][6.16582 (59.5431s)][6.19235 (61.9712s)][6.31439 (67.4254s)]]
+[[mpq_rational][[*1] (9.74135s)][[*1] (9.65697s)][[*1] (10.0077s)][[*1] (10.6781s)]]
]
[table Operator /(int)
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][2.26643 (3.13785s)][2.57125 (3.76931s)][3.20872 (5.06758s)][4.02177 (7.17803s)]]
-[[mpq_rational][[*1] (1.38449s)][[*1] (1.46594s)][[*1] (1.57931s)][[*1] (1.78479s)]]
+[[cpp_rational][1.75198 (2.50843s)][2.05836 (3.00689s)][2.45339 (4.00588s)][3.31983 (5.92837s)]]
+[[mpq_rational][[*1] (1.43177s)][[*1] (1.46082s)][[*1] (1.6328s)][[*1] (1.78575s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0102665s)][[*1] (0.0101737s)][[*1] (0.0101965s)][[*1] (0.0102909s)]]
+[[mpq_rational][37.3164 (0.383107s)][37.5023 (0.381537s)][37.4005 (0.381355s)][37.2621 (0.383461s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0658436s)][[*1] (0.0665504s)][[*1] (0.0659082s)][[*1] (0.0659089s)]]
+[[mpq_rational][32.3771 (2.13183s)][31.9648 (2.12727s)][32.1342 (2.1179s)][32.2079 (2.12279s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0624887s)][[*1] (0.0609531s)][[*1] (0.0613968s)][[*1] (0.062674s)]]
+[[mpq_rational][6.31396 (0.394551s)][6.41455 (0.390987s)][6.38973 (0.392309s)][6.27858 (0.393504s)]]
]
[table Operator str
[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
-[[cpp_rational][5.40493 (0.0199393s)][8.55089 (0.0511907s)][9.91026 (0.118839s)][9.93546 (0.285367s)]]
-[[mpq_rational][[*1] (0.00368909s)][[*1] (0.00598659s)][[*1] (0.0119915s)][[*1] (0.028722s)]]
+[[cpp_rational][5.4954 (0.020339s)][9.02403 (0.0517328s)][9.75685 (0.119248s)][9.80346 (0.286067s)]]
+[[mpq_rational][[*1] (0.0037011s)][[*1] (0.00573278s)][[*1] (0.012222s)][[*1] (0.0291802s)]]
]
[endsect]
Modified: sandbox/big_number/libs/multiprecision/performance/performance_test.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/performance/performance_test.cpp (original)
+++ sandbox/big_number/libs/multiprecision/performance/performance_test.cpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -46,7 +46,7 @@
#include <boost/multiprecision/tommath.hpp>
#include <boost/multiprecision/rational_adapter.hpp>
#endif
-#if defined(TEST_CPP_INT)
+#if defined(TEST_CPP_INT) || defined(TEST_CPP_INT_RATIONAL)
#include <boost/multiprecision/cpp_int.hpp>
#endif
@@ -197,7 +197,7 @@
{
stopwatch<boost::chrono::high_resolution_clock> w;
for(unsigned i = 0; i < b.size(); ++i)
- a[i] = b[i].str();
+ a[i].assign(b[i].str());
return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
}
double test_str()
@@ -332,6 +332,16 @@
}
return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
}
+ double test_powm()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 25; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = powm(b[i], b[i] / 2, c[i]);
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
double test_construct()
{
std::allocator<T> a;
@@ -522,7 +532,7 @@
val = frexp(val, &e);
typedef typename T::backend_type::exponent_type e_type;
- static boost::random::uniform_int_distribution<e_type> ui(0, std::numeric_limits<T>::max_exponent - 10);
+ static boost::random::uniform_int_distribution<e_type> ui(-30, 30);
return ldexp(val, static_cast<int>(ui(gen)));
}
T generate_random(const boost::mpl::int_<boost::multiprecision::number_kind_integer>&)
@@ -629,7 +639,7 @@
void report_result(const char* cat, const char* type, const char* op, unsigned precision, double time)
{
- std::cout << std::left << std::setw(15) << type << std::setw(10) << precision << std::setw(5) << op << time << std::endl;
+ std::cout << std::left << std::setw(15) << type << std::setw(10) << precision << std::setw(35) << op << time << std::endl;
result_table[cat][op][type][precision] = time;
}
@@ -650,6 +660,7 @@
report_result(cat, type, "&(int)", precision, t.test_and_int());
report_result(cat, type, "^(int)", precision, t.test_xor_int());
report_result(cat, type, "gcd", precision, t.test_gcd());
+ report_result(cat, type, "powm", precision, t.test_powm());
}
template <class Number, int N, class U>
void test_int_ops(tester<Number, N>& t, const char* type, unsigned precision, const U&)
@@ -687,14 +698,14 @@
report_result(cat, type, "construct(unsigned long long)", precision, t.test_construct_unsigned_ll());
test_int_ops(t, type, precision, typename boost::multiprecision::number_category<Number>::type());
// Hetero ops:
- report_result(cat, type, "+", precision, t.template test_add_hetero<unsigned long long>());
- report_result(cat, type, "-", precision, t.template test_subtract_hetero<unsigned long long>());
- report_result(cat, type, "*", precision, t.template test_multiply_hetero<unsigned long long>());
- report_result(cat, type, "/", precision, t.template test_divide_hetero<unsigned long long>());
- report_result(cat, type, "+", precision, t.template test_inplace_add_hetero<unsigned long long>());
- report_result(cat, type, "-", precision, t.template test_inplace_subtract_hetero<unsigned long long>());
- report_result(cat, type, "*", precision, t.template test_inplace_multiply_hetero<unsigned long long>());
- report_result(cat, type, "/", precision, t.template test_inplace_divide_hetero<unsigned long long>());
+ report_result(cat, type, "+(unsigned long long)", precision, t.template test_add_hetero<unsigned long long>());
+ report_result(cat, type, "-(unsigned long long)", precision, t.template test_subtract_hetero<unsigned long long>());
+ report_result(cat, type, "*(unsigned long long)", precision, t.template test_multiply_hetero<unsigned long long>());
+ report_result(cat, type, "/(unsigned long long)", precision, t.template test_divide_hetero<unsigned long long>());
+ report_result(cat, type, "+=(unsigned long long)", precision, t.template test_inplace_add_hetero<unsigned long long>());
+ report_result(cat, type, "-=(unsigned long long)", precision, t.template test_inplace_subtract_hetero<unsigned long long>());
+ report_result(cat, type, "*=(unsigned long long)", precision, t.template test_inplace_multiply_hetero<unsigned long long>());
+ report_result(cat, type, "/=(unsigned long long)", precision, t.template test_inplace_divide_hetero<unsigned long long>());
}
void quickbook_results()
@@ -738,7 +749,7 @@
precision_iterator l = k->second.begin();
std::advance(l, m);
if(best_times[m] > l->second)
- best_times[m] = l->second;
+ best_times[m] = l->second ? l->second : best_times[m];
}
}
@@ -786,12 +797,12 @@
test<boost::multiprecision::mpz_int>("gmp_int", 1024);
#endif
#ifdef TEST_CPP_INT
- test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, false, void>, false > >("cpp_int(unsigned, fixed)", 64);
- test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, true, void>, false > >("cpp_int(fixed)", 64);
- test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<128, true, void>, false > >("cpp_int(fixed)", 128);
- test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<256, true, void>, false > >("cpp_int(fixed)", 256);
- test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<512, true, void>, false > >("cpp_int(fixed)", 512);
- test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<1024, true, void>, false > >("cpp_int(fixed)", 1024);
+ //test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(unsigned, fixed)", 64);
+ //test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 64);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<128, 128, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 128);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<256, 256, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 256);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<512, 512, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 512);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<1024, 1024, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 1024);
test<boost::multiprecision::cpp_int>("cpp_int", 128);
test<boost::multiprecision::cpp_int>("cpp_int", 256);
Added: sandbox/big_number/libs/multiprecision/performance/sf_performance.hpp
==============================================================================
--- (empty file)
+++ sandbox/big_number/libs/multiprecision/performance/sf_performance.hpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -0,0 +1,209 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+#define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 750
+#define BOOST_MATH_PROMOTE_DOUBLE_POLICY false
+
+#if !defined(TEST_MPFR) && !defined(TEST_MPREAL) && !defined(TEST_MPF) && !defined(TEST_MPREAL) \
+ && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_CLASS) && !defined(TEST_FLOAT)
+# define TEST_MPFR
+# define TEST_MPF
+# define TEST_CPP_DEC_FLOAT
+# define TEST_MPFR_CLASS
+# define TEST_MPREAL
+# define TEST_FLOAT
+#endif
+
+#ifdef TEST_FLOAT
+#include "arithmetic_backend.hpp"
+#endif
+#ifdef TEST_MPFR_CLASS
+#include <boost/math/bindings/mpfr.hpp>
+#endif
+#ifdef TEST_MPFR
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_MPREAL
+#include <boost/math/bindings/mpreal.hpp>
+#endif
+#ifdef TEST_MPF
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#include <boost/math/special_functions/bessel.hpp>
+#include <boost/math/tools/rational.hpp>
+#include <boost/math/distributions/non_central_t.hpp>
+#include <libs/math/test/table_type.hpp>
+#include <boost/chrono.hpp>
+#include <boost/array.hpp>
+#include <boost/thread.hpp>
+
+template <class Real>
+Real test_bessel();
+
+template <class Clock>
+struct stopwatch
+{
+ typedef typename Clock::duration duration;
+ stopwatch()
+ {
+ m_start = Clock::now();
+ }
+ duration elapsed()
+ {
+ return Clock::now() - m_start;
+ }
+ void reset()
+ {
+ m_start = Clock::now();
+ }
+
+private:
+ typename Clock::time_point m_start;
+};
+
+template <class Real>
+Real test_bessel()
+{
+ try{
+# define T double
+# define SC_(x) x
+# include "libs/math/test/bessel_i_int_data.ipp"
+# include "libs/math/test/bessel_i_data.ipp"
+
+ Real r;
+
+ for(unsigned i = 0; i < bessel_i_int_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_i(Real(bessel_i_int_data[i][0]), Real(bessel_i_int_data[i][1]));
+ }
+ for(unsigned i = 0; i < bessel_i_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_i(Real(bessel_i_data[i][0]), Real(bessel_i_data[i][1]));
+ }
+
+#include "libs/math/test/bessel_j_int_data.ipp"
+ for(unsigned i = 0; i < bessel_j_int_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_j(Real(bessel_j_int_data[i][0]), Real(bessel_j_int_data[i][1]));
+ }
+
+#include "libs/math/test/bessel_j_data.ipp"
+ for(unsigned i = 0; i < bessel_j_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_j(Real(bessel_j_data[i][0]), Real(bessel_j_data[i][1]));
+ }
+
+#include "libs/math/test/bessel_j_large_data.ipp"
+ for(unsigned i = 0; i < bessel_j_large_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_j(Real(bessel_j_large_data[i][0]), Real(bessel_j_large_data[i][1]));
+ }
+
+#include "libs/math/test/sph_bessel_data.ipp"
+ for(unsigned i = 0; i < sph_bessel_data.size(); ++i)
+ {
+ r += boost::math::sph_bessel(static_cast<unsigned>(sph_bessel_data[i][0]), Real(sph_bessel_data[i][1]));
+ }
+
+ return r;
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ return 0;
+}
+
+template <class Real>
+Real test_polynomial()
+{
+ static const unsigned t[] = {
+ 2, 3, 4, 5, 6, 7, 8 };
+ Real result = 0;
+ for(Real k = 2; k < 1000; ++k)
+ result += boost::math::tools::evaluate_polynomial(t, k);
+
+ return result;
+}
+
+template <class Real>
+Real test_nct()
+{
+#define T double
+#include "libs/math/test/nct.ipp"
+
+ Real result = 0;
+ for(unsigned i = 0; i < nct.size(); ++i)
+ {
+ try{
+ result += quantile(boost::math::non_central_t_distribution<Real>(nct[i][0], nct[i][1]), nct[i][3]);
+ result += cdf(boost::math::non_central_t_distribution<Real>(nct[i][0], nct[i][1]), nct[i][2]);
+ }
+ catch(const std::exception&)
+ {}
+ }
+ return result;
+}
+
+extern unsigned allocation_count;
+
+template <class Real>
+void basic_allocation_test(const char* name, Real x)
+{
+ static const unsigned a[] = { 2, 3, 4, 5, 6, 7, 8 };
+ allocation_count = 0;
+ Real result = (((((a[6] * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0];
+ std::cout << "Allocation count for type " << name << " = " << allocation_count << std::endl;
+}
+
+template <class Real>
+void poly_allocation_test(const char* name, Real x)
+{
+ static const unsigned a[] = { 2, 3, 4, 5, 6, 7, 8 };
+ allocation_count = 0;
+ Real result = boost::math::tools::evaluate_polynomial(a, x);
+ std::cout << "Allocation count for type " << name << " = " << allocation_count << std::endl;
+}
+
+template <class Real>
+void time_proc(const char* name, Real (*proc)(), unsigned threads = 1)
+{
+ try{
+ static Real total = 0;
+ allocation_count = 0;
+ boost::chrono::duration<double> time;
+ stopwatch<boost::chrono::high_resolution_clock> c;
+ total += proc();
+ time = c.elapsed();
+ std::cout << "Time for " << name << " = " << time << std::endl;
+ std::cout << "Total allocations for " << name << " = " << allocation_count << std::endl;
+
+ for(unsigned thread_count = 1; thread_count < threads; ++thread_count)
+ {
+ c.reset();
+ boost::thread_group g;
+ for(unsigned i = 0; i <= thread_count; ++i)
+ g.create_thread(proc);
+ g.join_all();
+ time = c.elapsed();
+ std::cout << "Time for " << name << " (" << (thread_count + 1) << " threads) = " << time << std::endl;
+ std::cout << "Total allocations for " << name << " = " << allocation_count << std::endl;
+ }
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+}
+
+using namespace boost::multiprecision;
+
+void basic_tests();
+void bessel_tests();
+void poly_tests();
+void nct_tests();
Modified: sandbox/big_number/libs/multiprecision/performance/sf_performance_basic.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/performance/sf_performance_basic.cpp (original)
+++ sandbox/big_number/libs/multiprecision/performance/sf_performance_basic.cpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -38,12 +38,12 @@
#ifdef TEST_FLOAT
time_proc("Bessel Functions - double", test_bessel<double>);
time_proc("Bessel Functions - real_concept", test_bessel<boost::math::concepts::real_concept>);
- time_proc("Bessel Functions - arithmetic_backend<double>", test_bessel<number<arithmetic_backend<double> > >);
+ time_proc("Bessel Functions - arithmetic_backend<double>", test_bessel<number<arithmetic_backend<double>, et_on> >);
time_proc("Bessel Functions - arithmetic_backend<double> - no expression templates", test_bessel<number<arithmetic_backend<double>, et_off> >);
time_proc("Non-central T - double", test_nct<double>);
time_proc("Non-central T - real_concept", test_nct<boost::math::concepts::real_concept>);
- time_proc("Non-central T - arithmetic_backend<double>", test_nct<number<arithmetic_backend<double> > >);
+ time_proc("Non-central T - arithmetic_backend<double>", test_nct<number<arithmetic_backend<double>, et_on> >);
time_proc("Non-central T - arithmetic_backend<double> - no expression templates", test_nct<number<arithmetic_backend<double>, et_off> >);
#endif
}
Added: sandbox/big_number/libs/multiprecision/performance/voronoi_performance.cpp
==============================================================================
--- (empty file)
+++ sandbox/big_number/libs/multiprecision/performance/voronoi_performance.cpp 2012-11-18 11:06:49 EST (Sun, 18 Nov 2012)
@@ -0,0 +1,229 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef _MSC_VER
+#pragma warning(disable:4244)
+#endif
+
+#include <boost/polygon/detail/voronoi_predicates.hpp>
+#include <boost/polygon/detail/voronoi_structures.hpp>
+#include <boost/polygon/detail/skeleton_predicates.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
+#include <vector>
+#include <map>
+#include <boost/chrono.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+
+#ifdef TEST_GMP
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_TOMMATH
+#include <boost/multiprecision/tommath.hpp>
+#endif
+
+#include "arithmetic_backend.hpp"
+
+typedef boost::polygon::detail::point_2d<boost::int32_t> i_point;
+
+template <class Clock>
+struct stopwatch
+{
+ typedef typename Clock::duration duration;
+ stopwatch()
+ {
+ m_start = Clock::now();
+ }
+ duration elapsed()
+ {
+ return Clock::now() - m_start;
+ }
+ void reset()
+ {
+ m_start = Clock::now();
+ }
+
+private:
+ typename Clock::time_point m_start;
+};
+
+std::vector<i_point> points;
+boost::random::mt19937 gen;
+
+template <class Big>
+struct cpp_int_voronoi_traits
+{
+ typedef boost::int32_t int_type;
+ typedef boost::int64_t int_x2_type;
+ typedef boost::uint64_t uint_x2_type;
+ typedef Big big_int_type;
+ typedef double fpt_type;
+ typedef boost::polygon::detail::extended_exponent_fpt<fpt_type> efpt_type;
+ typedef boost::polygon::detail::ulp_comparison<fpt_type> ulp_cmp_type;
+ struct to_fpt_converter_type
+ {
+ template <class B, boost::multiprecision::expression_template_option ET>
+ double operator ()(const boost::multiprecision::number<B, ET>& val)
+ {
+ return val.template convert_to<double>();
+ }
+ double operator ()(double val)
+ {
+ return val;
+ }
+ double operator()(const efpt_type& that) const
+ {
+ return that.d();
+ }
+ template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
+ double operator()(const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e)
+ {
+ typedef typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type r_t;
+ r_t r(e);
+ return r.template convert_to<double>();
+ }
+ };
+ struct to_efpt_converter_type
+ {
+ template <class B, boost::multiprecision::expression_template_option ET>
+ efpt_type operator ()(const boost::multiprecision::number<B, ET>& val)
+ {
+ return efpt_type(val.template convert_to<double>(), 0);
+ }
+ efpt_type operator ()(double val)
+ {
+ return efpt_type(val, 0);
+ }
+ template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
+ double operator()(const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e)
+ {
+ typedef typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type r_t;
+ r_t r(e);
+ return efpt_type(r.template convert_to<double>(), 0);
+ }
+ };
+};
+
+template <class Big>
+struct native_int_voronoi_traits
+{
+ typedef boost::int32_t int_type;
+ typedef boost::int64_t int_x2_type;
+ typedef boost::uint64_t uint_x2_type;
+ typedef Big big_int_type;
+ typedef double fpt_type;
+ typedef boost::polygon::detail::extended_exponent_fpt<fpt_type> efpt_type;
+ typedef boost::polygon::detail::ulp_comparison<fpt_type> ulp_cmp_type;
+ struct to_fpt_converter_type
+ {
+ template <class T>
+ double operator ()(const T& val)const
+ {
+ return val;
+ }
+ double operator()(const efpt_type& that) const
+ {
+ return that.d();
+ }
+ };
+ struct to_efpt_converter_type
+ {
+ template <class T>
+ efpt_type operator ()(const T& val)const
+ {
+ return efpt_type(val, 0);
+ }
+ };
+};
+
+std::map<std::string, double> results;
+double min_time = (std::numeric_limits<double>::max)();
+
+template <class Traits>
+double test(const char* name)
+{
+ typedef boost::polygon::detail::voronoi_predicates<Traits> preds;
+ typedef boost::polygon::detail::circle_event<boost::int32_t> circle_event;
+ typedef boost::polygon::detail::site_event<boost::int32_t> site_event;
+ typedef typename preds::template mp_circle_formation_functor<site_event, circle_event> circle_pred;
+
+ boost::random::uniform_int_distribution<> dist(0, points.size() - 1);
+ circle_pred pc;
+ circle_event event;
+
+ stopwatch<boost::chrono::high_resolution_clock> w;
+
+ for(unsigned i = 0; i < 10000; ++i)
+ {
+ site_event s1(points[dist(gen)]);
+ site_event s2(points[dist(gen)]);
+ site_event s3(points[dist(gen)]);
+ pc.ppp(s1, s2, s3, event);
+ pc.pps(s1, s2, s3, 0, event);
+ pc.pss(s1, s2, s3, 0, event);
+ pc.sss(s1, s2, s3, event);
+ }
+ double d = boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ if(d < min_time)
+ min_time = d;
+ results[name] = d;
+ std::cout << "Time for " << std::setw(30) << std::left << name << " = " << d << std::endl;
+ return d;
+}
+
+void generate_quickbook()
+{
+ std::cout << "[table\n[[Integer Type][Relative Performance (Actual time in parenthesis)]]\n";
+
+ std::map<std::string, double>::const_iterator i(results.begin()), j(results.end());
+
+ while(i != j)
+ {
+ double rel = i->second / min_time;
+ std::cout << "[[" << i->first << "][" << rel << "(" << i->second << "s)]]\n";
+ ++i;
+ }
+
+ std::cout << "]\n";
+}
+
+
+int main()
+{
+ boost::random::uniform_int_distribution<> dist((std::numeric_limits<boost::int32_t>::min)() / 2, (std::numeric_limits<boost::int32_t>::max)() / 2);
+
+ for(unsigned i = 0; i < 100; ++i)
+ {
+ points.push_back(i_point(dist(gen), dist(gen)));
+ }
+
+ test<boost::polygon::detail::voronoi_ctype_traits<boost::int32_t> >("extended_int");
+
+ test<cpp_int_voronoi_traits<boost::multiprecision::int256_t> >("int256_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::int512_t> >("int512_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::int1024_t> >("int1024_t");
+
+ test<cpp_int_voronoi_traits<boost::multiprecision::checked_int256_t> >("checked_int256_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::checked_int512_t> >("checked_int512_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::checked_int1024_t> >("checked_int1024_t");
+
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<>, boost::multiprecision::et_off> > >("cpp_int");
+
+#ifdef TEST_GMP
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::gmp_int, boost::multiprecision::et_off> > >("mpz_int");
+#endif
+#ifdef TEST_TOMMATH
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::tommath_int, boost::multiprecision::et_off> > >("tom_int");
+#endif
+
+ generate_quickbook();
+
+ test<native_int_voronoi_traits<boost::int64_t> >("int64_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<boost::int64_t>, boost::multiprecision::et_off> > >("number<arithmetic_backend<boost::int64_t>, et_off>");
+ //test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<boost::int64_t>, boost::multiprecision::et_on> > >("number<arithmetic_backend<boost::int64_t>, et_on>");
+
+ return 0;
+}
+
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk