質問編集履歴
3
d
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
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
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
|
|