-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnumber.txt
263 lines (215 loc) · 15.2 KB
/
number.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
- NUMBER MANUAL -
==============================================================================
型名 ビット数 表現範囲
・signed
char 8 bit -128 ~ 127
short [int] 16 bit -32768 ~ 32767
long [int] 32 bit -2147483648 ~ 2147483647
long long [int] 64 bit -9223372036854775808 ~ 9223372036854775807
・unsigned
char 8 bit 0 ~ 255
short [int] 16 bit 0 ~ 65535
long [int] 32 bit 0 ~ 4294967295
long long [int] 64 bit 0 ~ 18446744073709551615
型名 ビット数 符号 指数 仮数 未使用
・float
float 32 bit 1 bit 8 bit 23 bit 0 bit
double 64 bit 1 bit 11 bit 52 bit 0 bit
long double 96 bit 1 bit 15 bit 64 bit 16 bit
==============================================================================
浮動小数点実数
・単精度(single:.s) = float
31 30 23 22 0
┌┬───────┬──────────────────────┐
││ 指数(8 bit) │ 仮数(23 bit) │
└┴───────┴──────────────────────┘
└ 符号(1 bit) {0:正 1:負}
符号マスク = $80000000
指数マスク = $7f800000
仮数マスク = $007fffff
指数中央値 = $3f800000 ($7f)
非数最大値 = $7fffffff ┐
〃 最低値 = $7f800001 ┘
無限大 = $7f800000
正規化数最大値 = $7f7fffff ┐
〃 最小値 = $00800000 ┘
非正規化数最大値= $007fffff ┐
〃 最小値= $00000001 ┘
零 = $00000000
┌───────────────────┬───────┐
│符号 指数 仮数 │表現値 │
├───────────────────┼───────┤
│ $7fffff │ │
│0/1 $ff ~ │非数(NaN) │
│ $000001 │ │
├───────────────────┼───────┤
│0/1 $ff $000000 │無限大(∞) │
├───────────────────┼───────┤
│ $fe $7fffff │ │
│0/1 ~ ~ │正規化数 │
│ $01 $000000 │ │
├───────────────────┼───────┤
│ $7fffff │ │
│0/1 $00 ~ │非正規化数 │
│ $000001 │ │
├───────────────────┼───────┤
│0/1 $00 $000000 │零 │
└───────────────────┴───────┘
・倍精度(double:.d) = double
第一ロングワード(上位):
31 30 20 19 0
┌┬──────────┬───────────────────┐
││ 指数(11 bit) │ 仮数(52 bit) {上位 20 bit} │
└┴──────────┴───────────────────┘
└ 符号(1 bit) {0:正 1:負}
第二ロングワード(下位):
31 0
┌───────────────────────────────┐
│ 仮数(52 bit) {下位 32 bit} │
└───────────────────────────────┘
符号マスク = $80000000_00000000
指数マスク = $7ff00000_00000000
仮数マスク = $000fffff_ffffffff
指数中央値 = $3ff00000_00000000 ($3ff)
非数最大値 = $7fffffff_ffffffff ┐
〃 最低値 = $7ff00000_00000001 ┘
無限大 = $7ff00000_00000000
正規化数最大値 = $7fefffff_ffffffff ┐
〃 最小値 = $00100000_00000000 ┘
非正規化数最大値= $000fffff_ffffffff ┐
〃 最小値= $00000000_00000001 ┘
零 = $00000000_00000000
┌───────────────────┬───────┐
│符号 指数 仮数 │表現値 │
├───────────────────┼───────┤
│ $fffff_ffffffff │ │
│0/1 $7ff ~ │非数(NaN) │
│ $00000_00000001 │ │
├───────────────────┼───────┤
│0/1 $7ff $00000_00000000 │無限大(∞) │
├───────────────────┼───────┤
│ $7fe $fffff_ffffffff │ │
│0/1 ~ ~ │正規化数 │
│ $001 $00000_00000000 │ │
├───────────────────┼───────┤
│ $fffff_ffffffff │ │
│0/1 $000 ~ │非正規化数 │
│ $00000_00000001 │ │
├───────────────────┼───────┤
│0/1 $000 $00000_00000001 │零 │
└───────────────────┴───────┘
・拡張精度(extended:.x) = long double
第一ロングワード(上位):
31 30 16 15 0
┌┬──────────────┬───────────────┐
││ 指数(15 bit) │ 未使用(16 bit) │
└┴──────────────┴───────────────┘
└ 符号(1 bit) {0:正 1:負}
第二ロングワード(中位):
31 30 0
┌───────────────────────────────┐
││ 仮数(64 bit) {上位 32 bit} │
└───────────────────────────────┘
└ 仮数の整数部分(1 bit)
第三ロングワード(下位):
31 0
┌───────────────────────────────┐
│ 仮数(64 bit) {下位 32 bit} │
└───────────────────────────────┘
符号マスク = $80000000_00000000_00000000
指数マスク = $7fff0000_00000000_00000000
仮数マスク = $00000000_ffffffff_ffffffff
指数中央値 = $3fff0000_00000000_00000000 ($3fff)
未使用マスク = $0000ffff_00000000_00000000
非数最大値(1) = $7fff0000_ffffffff_ffffffff ─┐
〃 最低値(1) = $7fff0000_80000000_00000001 ─┤
無限大(1) = $7fff0000_80000000_00000000 ─│┐
非数最大値(2) = $7fff0000_7fffffff_ffffffff ─┤│
〃 最低値(2) = $7fff0000_00000000_00000001 ─┘│
無限大(2) = $7fff0000_00000000_00000000 ──┘
正規化数最大値 = $7ffe0000_ffffffff_ffffffff ┐
〃 最小値 = $00010000_00000000_00000000 ┘
非正規化数最大値= $00000000_ffffffff_ffffffff ┐
〃 最小値= $00000000_00000000_00000001 ┘
零 = $00000000_00000000_00000000
┌───────────────────┬───────┐
│符号 指数 仮数 │表現値 │
├───────────────────┼───────┤
│ $ffffffff_ffffffff │ │
│0/1 $7fff ~ │ │
│ $80000000_00000001 │非数(NaN) │
│ $7fffffff_ffffffff │ │
│ ~ │ │
│ $00000000_00000001 │ │
├───────────────────┼───────┤
│0/1 $7fff $80000000_00000000 │無限大(∞) │
│ $00000000_00000000 │ │
├───────────────────┼───────┤
│ $7ffe $ffffffff_ffffffff │ │
│0/1 ~ ~ │正規化数 │
│ $0001 $00000000_00000000 │ │
├───────────────────┼───────┤
│ $ffffffff_ffffffff │ │
│0/1 $0000 ~ │非正規化数 │
│ $00000000_00000001 │ │
├───────────────────┼───────┤
│0/1 $0000 $00000000_00000000 │零 │
└───────────────────┴───────┘
※非数・無限大の区別は仮数の整数ビットを無視する。
・パックドデシマル(packed:.p)
第一ロングワード(上位):
31 30 27 16 15 4 3 0
┌┬┬─┬───────────┬───────────┬───┐
│││ │指数(12 bit = BCD 3桁)│ 未使用(12 bit) │ │
└┴┴─┴───────────┴───────────┴───┘
││ └ 非数・無限大の時に使用(2 bit) {0:通常} │
││ │
│└ 指数の符号(1 bit) {0:正 1:負} 仮数(68 bit = BCD 17桁)
└─ 仮数の符号(1 bit) {0:正 1:負} {上位 4 bit = 1桁}
第二ロングワード(中位):
31 30 0
┌───────────────────────────────┐
│ 仮数(68 bit = BCD 17桁) {中位 32 bit = 8桁} │
└───────────────────────────────┘
第三ロングワード(下位):
31 0
┌───────────────────────────────┐
│ 仮数(68 bit = BCD 17桁) {下位 32 bit = 8桁} │
└───────────────────────────────┘
仮数符号マスク = $80000000_00000000_00000000
指数符号マスク = $40000000_00000000_00000000
指数マスク = $0fff0000_00000000_00000000
仮数マスク = $0000000f_ffffffff_ffffffff
未使用マスク = $3000fff0_00000000_00000000
非数最大値 = $7fff0000_ffffffff_ffffffff ┐
〃 最低値 = $7fff0000_00000000_00000001 ┘
無限大 = $7fff0000_00000000_00000000
正規化数最大値 = $0fff0009_99999999_99999999 ┐
〃 最小値 = $00010000_00000000_00000000 ┘
非正規化数最大値= $00000009_99999999_99999999 ┐
〃 最小値= $00000000_00000000_00000001 ┘
零 = $00000000_00000000_00000000
┌───────────────────────┬───────┐
│仮数/指数符号 指数 仮数 │表現値 │
├───────────────────────┼───────┤
│ [$ffffffff_ffffffff] │ │
│0/1 [$7fff] ~ │非数(NaN) │
│ [$00000000_00000001] │ │
├───────────────────────┼───────┤
│0/1 [$7fff] [$00000000_00000000] │無限大(∞) │
├───────────────────────┼───────┤
│ $fff $9_99999999_99999999 │ │
│0/1 0/1 ~ ~ │正規化数 │
│ $001 $0_00000000_00000000 │ │
├───────────────────────┼───────┤
│ $9_99999999_99999999 │ │
│0/1 0/1 $000 ~ │非正規化数 │
│ $0_00000000_00000001 │ │
├───────────────────────┼───────┤
│0/1 0/1 $000 $0_00000000_00000000 │零 │
└───────────────────────┴───────┘
※指数は 3 桁の BCD、仮数は 17 桁の BCD。
※非数・無限大・零である場合、その内部表現値は拡張精度形式と等しい。
※ビット29~28は非数・無限大の内部表現値を拡張精度形式と等しくする為に
%11 にセットして使われる。それ以外の値の場合は %00 となる。
==============================================================================