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

回答編集履歴

2

追記

2019/02/10 15:21

投稿

otn
otn

スコア86329

answer CHANGED
@@ -1,3 +1,33 @@
1
1
  5.03と0.01は、仮数部の下の桁が2ビットずらすと、ほぼ同じになります。
2
2
 
3
- つまり、9.9999・・・ を3.3333・・・で割ると3になるようなことです。
3
+ つまり、9.9999・・・ を3.3333・・・で割ると3になるようなことです。
4
+
5
+ 追記:
6
+ ```C
7
+ #include <stdio.h>
8
+ #include <bits/types.h>
9
+
10
+ void foo(double x){
11
+ __uint64_t *z = (__uint64_t *)&x;
12
+ int i;
13
+
14
+ *z <<= 12; /* 符号部と指数部を飛ばす */
15
+ for(i=0; i<52; i++){
16
+ printf("%1d", !!(*z & 0x8000000000000000));
17
+ *z <<= 1;
18
+ }
19
+ printf("\n");
20
+ }
21
+
22
+ int main(){
23
+ foo(5.03);
24
+ foo(0.01);
25
+ }
26
+ ```
27
+ ```Plain
28
+ 0100000111101011100001010001111010111000010100011111
29
+ 0100011110101110000101000111101011100001010001111011
30
+ で、0.01のほうを2桁ずらすと、
31
+ 0100000111101011100001010001111010111000010100011111
32
+ 0100011110101110000101000111101011100001010001111011
33
+ ```

1

訂正

2019/02/10 15:21

投稿

otn
otn

スコア86329

answer CHANGED
@@ -1,3 +1,3 @@
1
- 5.03と0.01は、仮数部の下の桁が3ビットずらすと、ほぼ同じになります。
1
+ 5.03と0.01は、仮数部の下の桁が2ビットずらすと、ほぼ同じになります。
2
2
 
3
3
  つまり、9.9999・・・ を3.3333・・・で割ると3になるようなことです。