7 Ağustos 2017 Pazartesi

multiprecision number Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/multiprecision/gmp.hpp> 
List of arbitrary-precision arithmetic software sayfasına bakılabilir. Bu sınıf aslında direkt kullanılmaz. Genellikle bir typedef ile kullanılır. cpp_int sınıfına bakılabilir.

Tanımlama - backend type
Şöyle yaparız. Altta GNU MP BigNum kütüphanesini kullanır.
typedef mp::number<mp::gmp_float<4>> float_type;
Şöyle yaparız.
const int precision = 100;
typedef mp::number<mp::cpp_dec_float<100> > float_type;
Tanımlama - backend type + expression template
Açıklama şöyle
You can have all the tail-call implementation details as you expect it by opting out of the lazy-evaluation template expressions (boost::multiprecision::et_off as described in the links), but be sure to check that the reduced code-size and perceived TCO optimization actually leads to increased performance.
Şöyle yaparız.
using big_int = bmp::number<bmp::cpp_int::backend_type, bmp::et_off>;
Constructor - string
Precision olarak 100 verdiysek noktadan sonra 100 rakam verebiliriz. Şöyle yaparız.
float_type pi(
    "3.1415926535"
      "8979323846"
      "2643383279"
      "5028841971"
      "6939937510"
      "5820974944"
      "5923078164"
      "0628620899"
      "8628034825"
      "3421170679"
  );
Copy Constructor
Şöyle yaparız.
float_type x2 = x (...);
convert_to metodu
double'a çevirmek için şöyle yaparız.
float_type v = ...;
double value = v.convert_to<double>();
std:string'e çevirmek için şöyle yaparız.
std::string str = v.convert_to<std::string>();
mpz_int'e çevirmek için şöyle yaparız.
typedef mp::mpz_int mpint;
typedef mp::number<mp::gmp_float<4> > mpfloat;


mpfloat p = ...;
std::cout << p.template convert_to<mpint>() << std::endl;
operator * metodu
Şöyle yaparız.
x = (x * x);
operator = metodu
Şöyle yaparız.
float_type x = 0.0;
operator << metodu - Bitshift
Şöyle yaparız.
uint128_t number = 100;
uint32_t ten = 10;

auto leftShift = number << ten;
Bu metod sağ tarafa sadece integral sayıları alır. Şu kod derlehttps://stackoverflow.com/questions/45529016/bitwise-operation-using-c-boost-librarynmez.
cpp_int ten = 10
cout << (number<<c) << endl;
operator || metodu
Şöyle yaparız.
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;

int128_t int64left = CreateRandomInt64ViaBoost()
int128_t int64right = CreateRandomInt64ViaBoost()

int128_t randomInt = int64left << 64 | int64right;



Hiç yorum yok:

Yorum Gönder