teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

多倍長計算のコードを追加

2021/01/28 14:00

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,3 +1,36 @@
1
1
  double の精度は 2進で 53ビット。これを 10進に換算する約16桁です。
2
2
  先頭から16桁までが有効数字。
3
- 後の桁は、2進の54ビット目以降が全部0 だとして10進数に変換したものです。
3
+ 後の桁は、2進の54ビット目以降が全部0 だとして10進数に変換したものです。
4
+
5
+ **追記**
6
+ 数値を int の配列で保持し、1つの要素に10進 4桁を入れる多倍長計算をしてみました。
7
+ ```C
8
+ #include <stdio.h>
9
+
10
+ #define N 6 // (4 * N)桁までの数値
11
+
12
+ void print(const int *a)
13
+ {
14
+ int i = N;
15
+ while (--i > 0 && a[i] == 0) ;
16
+ printf("%d", a[i]);
17
+ while (--i >= 0) printf("%04d", a[i]);
18
+ putchar('\n');
19
+ }
20
+
21
+ void power(int x, int y, int *a) // a = pow(x, y)
22
+ {
23
+ a[0] = 1;
24
+ for (int i = 1; i < N; i++) a[i] = 0;
25
+ for (int i = 0; i < y; i++)
26
+ for (int c = 0, j = 0; j < N; j++)
27
+ a[j] = a[j] * x + c, c = a[j] / 10000, a[j] %= 10000;
28
+ }
29
+
30
+ int main(void)
31
+ {
32
+ int a[N];
33
+ power(17, 17, a);
34
+ print(a);
35
+ }
36
+ ```