回答編集履歴

2

追記

2019/02/10 15:21

投稿

otn
otn

スコア84667

test CHANGED
@@ -3,3 +3,63 @@
3
3
 
4
4
 
5
5
  つまり、9.9999・・・ を3.3333・・・で割ると3になるようなことです。
6
+
7
+
8
+
9
+ 追記:
10
+
11
+ ```C
12
+
13
+ #include <stdio.h>
14
+
15
+ #include <bits/types.h>
16
+
17
+
18
+
19
+ void foo(double x){
20
+
21
+ __uint64_t *z = (__uint64_t *)&x;
22
+
23
+ int i;
24
+
25
+
26
+
27
+ *z <<= 12; /* 符号部と指数部を飛ばす */
28
+
29
+ for(i=0; i<52; i++){
30
+
31
+ printf("%1d", !!(*z & 0x8000000000000000));
32
+
33
+ *z <<= 1;
34
+
35
+ }
36
+
37
+ printf("\n");
38
+
39
+ }
40
+
41
+
42
+
43
+ int main(){
44
+
45
+ foo(5.03);
46
+
47
+ foo(0.01);
48
+
49
+ }
50
+
51
+ ```
52
+
53
+ ```Plain
54
+
55
+ 0100000111101011100001010001111010111000010100011111
56
+
57
+ 0100011110101110000101000111101011100001010001111011
58
+
59
+ で、0.01のほうを2桁ずらすと、
60
+
61
+ 0100000111101011100001010001111010111000010100011111
62
+
63
+ 0100011110101110000101000111101011100001010001111011
64
+
65
+ ```

1

訂正

2019/02/10 15:21

投稿

otn
otn

スコア84667

test CHANGED
@@ -1,4 +1,4 @@
1
- 5.03と0.01は、仮数部の下の桁が3ビットずらすと、ほぼ同じになります。
1
+ 5.03と0.01は、仮数部の下の桁が2ビットずらすと、ほぼ同じになります。
2
2
 
3
3
 
4
4