GMP(GNU Multi-Precision Library)の使い方3 その他演算編

GMP(GNU Multi-Precision Library)の使い方2では四則演算についてまとめました。
GMPには他にも色々な演算が用意されているので今回はそちらをまとめたいと思います。

べき演算

#include <stdio.h>
#include <gmp.h>
 
int main()
{
    mpz_t I;
    mpf_t F;
 
    unsigned long ul = 5;

    mpz_init_set_str(I, "10", 10);
    mpf_init_set_str(F, "3.14", 10);

    mpz_pow_ui(I, I, ul); //I = I^ul (100000)
    mpz_out_str(stdout, 10, I);
    printf("\n");

    mpf_pow_ui(F, F, ul); //F = F^ul (0.3052447762e3)
    mpf_out_str(stdout, 10, 10, F);
    printf("\n");

    return 0;
}

平方根、累乗根

#include <stdio.h>
#include <gmp.h>

int main()
{
    mpz_t I,J;
    mpf_t F,G;
    unsigned long ul = 5;

    mpz_init_set_str(I, "100000", 10);
    mpz_init(J);

    mpf_init_set_str(F, "3.14", 10);
    mpf_init(G);

    //平方根
    mpz_sqrt(J, I); //J = √I (316)
    mpz_out_str(stdout, 10, J);
    printf("\n");

    mpf_sqrt(G, F); //(0.1772004515e1)
    mpf_out_str(stdout, 10, 10, G);
    printf("\n");

    //累乗根
    mpz_root(J, I, 5); //J = [5]√I (10)
    mpz_out_str(stdout, 10, J);
    printf("\n");

    return 0;
}

絶対値

#include <stdio.h>
#include <gmp.h>

int main()
{
    mpz_t I,J;
    mpf_t F,G;
    mpq_t Q,R;

    mpz_init_set_str(I, "-12345", 10);
    mpz_init(J);
    mpf_init_set_str(F, "-123.45", 10);
    mpf_init(G);
    mpq_init(Q);
    mpq_init(R);
    mpq_set_str(Q, "-123/45", 10);

    mpz_abs(J, I); //(12345)
    mpz_out_str(stdout, 10, J);
    printf("\n");

    mpf_abs(G, F); //(0.12345e3)
    mpf_out_str(stdout, 10, 10, G);
    printf("\n");
    
    mpq_abs(R, Q); //(123/45)
    mpq_out_str(stdout, 10, R);
    printf("\n");
}

符号反転

#include <stdio.h>
#include <gmp.h>

int main()
{
    mpz_t I;
    mpf_t F;
    
    mpz_init_set_str(I, "12345", 10);
    mpf_init_set_str(F, "-12.345", 10);

    mpz_neg(I, I); //(-12345)
    mpz_out_str(stdout, 10, I);
    printf("\n");

    mpf_neg(F, F); //(0.12345e2)
    mpf_out_str(stdout, 10, 10, F);
    printf("\n");

    return 0;
}

逆数

#include <stdio.h>
#include <gmp.h>

int main()
{
    mpq_t Q;

    mpq_init(Q);
    mpq_set_str(Q, "123/45", 10);

    mpq_inv(Q, Q);
    mpq_out_str(stdout, 10, Q);
    printf("\n");
}
カテゴリー: C, Ubuntu, ソフトウェア パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です