コンパイルは -lexfloat というオプションをつけるくらい (簡単)。
以下プログラムの書き方についてのメモ。
#define PRECISION 1000 #include <exfloat.h> |
これで 10 進 1000 桁の精度の exfloat というクラスが使えるようになる。
x が exfloat 型の変数であるとき、
整数式ならば
のように代入が出来るが、
double の式を代入したりは出来ない (
や、
y が double 型の変数の場合の
は駄目)。
double x; exfloat y; .... x = static_cast<double>(y) |
| 表示桁数 |
std::cout << std::setprecision(1000); |
| 固定小数形式 (fixed-point format) |
std::cout << std::setiosflags(std::ios::fixed); |
| 指数形式 (scientific notation, exponential notation) |
std::cout << std::setiosflags(std::ios::scientific); |
| test-exflib-1.cpp |
// test-exflib-1.cpp
#define PRECISION 50
#include <iostream>
#include <exfloat.h>
using namespace std;
int main(void)
{
exfloat x, y;
x = "1/3";
cout << setprecision(PRECISION) << x << endl;
y = 1;
y /= 3;
cout << y << endl;
x = "#PI";
cout << x << endl;
return 0;
}
|
| 実行 |
[katsurada:~] mk% g++ test-exflib-1.cpp -lexfloat [katsurada:~] mk% ./a.out 0.33333333333333333333333333333333333333333333333333 0.33333333333333333333333333333333333333333333333333 3.1415926535897932384626433832795028841971693993751 [katsurada:~] mk% |
桂田 祐史