質問編集履歴

3

d

2020/07/27 02:02

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
File without changes
test CHANGED
@@ -109,3 +109,31 @@
109
109
  }
110
110
 
111
111
  ```
112
+
113
+
114
+
115
+ ## 追記
116
+
117
+
118
+
119
+ std の実装はまだ確認してませんが、yohhoy さん、SHOMI さんのコメントで値がどこから出てきたのか謎が解けました。
120
+
121
+ ご回答ありがとうございます。
122
+
123
+
124
+
125
+ `double a = std::log(2.)` の浮動小数点表記
126
+
127
+
128
+
129
+ * `bias = 1023`
130
+
131
+ * 仮数部 `0x162E42FEFA39EF * (2 ** -52)`
132
+
133
+ * 指数部 `0x3FE`
134
+
135
+ * 浮動小数点数: `0x162E42FEFA39EF * (2 ** -52) * (2**0x3FE - 1023) = 6243314768165359 / 9007199254740992`
136
+
137
+
138
+
139
+ [6243314768165359 / 9007199254740992 = 0.69314718055994528622676398299518041312694549560546875](https://www.wolframalpha.com/input/?i=6243314768165359+%2F+9007199254740992&lang=ja)

2

d

2020/07/27 02:02

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
File without changes
test CHANGED
@@ -58,8 +58,6 @@
58
58
 
59
59
  ```cpp
60
60
 
61
- #define _USE_MATH_DEFINES
62
-
63
61
  #include <cmath>
64
62
 
65
63
  #include <iomanip>
@@ -72,31 +70,31 @@
72
70
 
73
71
  {
74
72
 
75
- std::cout << std::log(2) << std::endl;
73
+ std::cout << std::log(2.) << std::endl;
76
74
 
77
75
  // 0.693147
78
76
 
79
77
 
80
78
 
81
- std::cout << std::setprecision(16) << std::log(2) << std::endl;
79
+ std::cout << std::setprecision(16) << std::log(2.) << std::endl;
82
80
 
83
81
  // 0.6931471805599453
84
82
 
85
83
 
86
84
 
87
- std::cout << std::setprecision(52) << std::log(2) << std::endl;
85
+ std::cout << std::setprecision(52) << std::log(2.) << std::endl;
88
86
 
89
87
  // 0.6931471805599452862267639829951804131269454956054688
90
88
 
91
89
 
92
90
 
93
- std::cout << std::setprecision(53) << std::log(2) << std::endl;
91
+ std::cout << std::setprecision(53) << std::log(2.) << std::endl;
94
92
 
95
93
  // 0.69314718055994528622676398299518041312694549560546875
96
94
 
97
95
 
98
96
 
99
- std::cout << std::setprecision(54) << std::log(2) << std::endl;
97
+ std::cout << std::setprecision(54) << std::log(2.) << std::endl;
100
98
 
101
99
  // 0.69314718055994528622676398299518041312694549560546875
102
100
 

1

d

2020/07/26 15:12

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  * `std::setprecision(53)` より大きい値を設定しても53桁までしか表示されないようですが、そういう仕様でしょうか?
14
14
 
15
- * もしくは動作未定義なのでしょうか?
15
+ * もしくは大きい桁数を設定した場合の挙は動作未定義なのでしょうか?
16
16
 
17
17
 
18
18