ウィキペディアの mod は信用できません。
{{#expr: 12345678901234567890 mod 10000000000000000}}
→ -1065172474984448
- (正しくは 5678901234567890)
このため下式がうまく表示されません。
{{進法 | 10 | 12345678901234567890 }}
→ 1234 (現時点での結果)
対策を考えます。 - TAKASUGI Shinji (会話) 2008年3月14日 (金) 13:50 (UTC)[返信]
- ウィキペディアが倍精度小数 (精度 53 ビット) を使っていることを確認します。
{{#expr: (134217728 * 67108864 - 1) mod 2}}
→ 1
- 253 - 1 は桁落ちしない。
{{#expr: (134217728 * 134217728 - 1) mod 2}}
→ 0
- 254 - 1 は桁落ちする。
- 次に十進数を正しく読めることを確認します。
{{#expr: (134217728 * 67108864) - 9007199254740991}}
→ 1
- 253 - 1 = 9007199254740991 は桁落ちしない。
{{#expr: (134217728 * 67108864) - 9007199254740992}}
→ 0
- 253 = 9007199254740992 は桁落ちしない。
{{#expr: (134217728 * 67108864) - 9007199254740993}}
→ 0
- 253 + 1 = 9007199254740993 は桁落ちする。
- 計算途中は浮動小数点のままであることを確認します。
{{#expr: 9007199254740992 - (9007199254740992 * 9007199254740992 - 9007199254740992 * 99999) / 9007199254740992 }}
→ 99999
- - TAKASUGI Shinji (会話) 2008年3月14日 (金) 14:56 (UTC)[返信]
底 n の時に桁落ちしない最大の np は、p = 53 log 2 / log n で求まります。
n |
p
|
2 |
53.00
|
3 |
33.44
|
4 |
26.50
|
5 |
22.83
|
6 |
20.50
|
7 |
18.88
|
8 |
17.67
|
|
n |
p
|
9 |
16.72
|
10 |
15.95
|
11 |
15.32
|
12 |
14.78
|
13 |
14.32
|
14 |
13.92
|
15 |
13.57
|
|
n |
p
|
16 |
13.25
|
17 |
12.97
|
18 |
12.71
|
19 |
12.48
|
20 |
12.26
|
21 |
12.07
|
22 |
11.88
|
|
n |
p
|
23 |
11.72
|
24 |
11.56
|
25 |
11.41
|
26 |
11.28
|
27 |
11.15
|
28 |
11.02
|
29 |
10.91
|
|
n |
p
|
30 |
10.80
|
31 |
10.70
|
32 |
10.60
|
33 |
10.51
|
34 |
10.42
|
35 |
10.33
|
36 |
10.25
|
|
現在の {{進法}} の仕様では、32 桁を最大とし、16 桁に区切って計算していますが、これだと底が 10 以上の時に桁落ちします。このため、底が 10 以上の時は 16 桁を最大とし、8 桁に区切って計算することにします。 - TAKASUGI Shinji (会話) 2008年3月18日 (火) 14:02 (UTC)[返信]