multiprecision/example/tommath_snips.cpp
2019-04-23 08:51:47 +02:00

85 lines
1.7 KiB
C++

///////////////////////////////////////////////////////////////
// Copyright 2011 John Maddock. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
#include <boost/multiprecision/tommath.hpp>
#include <iostream>
void t1()
{
//[tommath_eg
//=#include <boost/multiprecision/tommath.hpp>
//=#include <iostream>
//=
//=int main()
//={
boost::multiprecision::tom_int v = 1;
// Do some arithmetic:
for(unsigned i = 1; i <= 1000; ++i)
v *= i;
std::cout << v << std::endl; // prints 1000!
std::cout << std::hex << v << std::endl; // prints 1000! in hex format
try{
std::cout << std::hex << -v << std::endl; // Ooops! can't print a negative value in hex format!
}
catch(const std::runtime_error& e)
{
std::cout << e.what() << std::endl;
}
try{
// v is not a 2's complement type, bitwise operations are only supported
// on positive values:
v = -v & 2;
}
catch(const std::runtime_error& e)
{
std::cout << e.what() << std::endl;
}
//= return 0;
//=}
//]
}
void t3()
{
//[mp_rat_eg
//=#include <boost/multiprecision/tommath.hpp>
//=#include <iostream>
//=
//=int main()
//={
using namespace boost::multiprecision;
tom_rational v = 1;
// Do some arithmetic:
for(unsigned i = 1; i <= 1000; ++i)
v *= i;
v /= 10;
std::cout << v << std::endl; // prints 1000! / 10
std::cout << numerator(v) << std::endl;
std::cout << denominator(v) << std::endl;
tom_rational w(2, 3); // Component wise constructor
std::cout << w << std::endl; // prints 2/3
//= return 0;
//=}
//]
}
int main()
{
t1();
t3();
return 0;
}