質問編集履歴

1

ソースコードを追加

2017/05/08 05:35

投稿

nayuta314
nayuta314

スコア12

test CHANGED
File without changes
test CHANGED
@@ -127,3 +127,105 @@
127
127
 
128
128
 
129
129
  ※整数15小数点以下0.000000と出力される予定です
130
+
131
+
132
+
133
+ ###追記
134
+
135
+ 皆さんの意見を参考にソースコードを組み替えてみました。
136
+
137
+ ご指導のほどよろしくお願いします。
138
+
139
+
140
+
141
+ ```c
142
+
143
+
144
+
145
+ #include<stdio.h>
146
+
147
+ #include<stdlib.h>
148
+
149
+ int main(void){
150
+
151
+ int bit[32],i,c;
152
+
153
+
154
+
155
+ printf("IEEE規格754による実数表現を行います。\n"
156
+
157
+ "長さが32の1と0の列を入力してください。:");
158
+
159
+ for(i=31;i>=0; ){
160
+
161
+ switch(c=getchar()){
162
+
163
+ case '0': case '1':
164
+
165
+ bit[i--] = c-'0';
166
+
167
+ break;
168
+
169
+ case ' ': case '\n': case '\t':
170
+
171
+ break;
172
+
173
+ default:
174
+
175
+ printf("無効な文字です.\n");
176
+
177
+ exit(EXIT_FAILURE);
178
+
179
+ }
180
+
181
+ signed char E;
182
+
183
+ int M;
184
+
185
+ int x,i;
186
+
187
+ char NaN,Inf;
188
+
189
+ E = -bit[31];
190
+
191
+ for(i=9;i>=0;i--){
192
+
193
+ E = E*2+bit[i];
194
+
195
+ }
196
+
197
+ M=bit[32];
198
+
199
+ for(i=10;i>=31;i++){
200
+
201
+ M=M/2+bit[i];
202
+
203
+ }
204
+
205
+ if(E==128&&M==0){
206
+
207
+ printf("Inf");
208
+
209
+ }else if(-127<E && E<128){
210
+
211
+ x=(-1)^bit[0]*(1+M)*(2^E);
212
+
213
+ printf("%f",x);
214
+
215
+ }else if(M!=0&&E==128){
216
+
217
+ printf("NaN");
218
+
219
+ }else{
220
+
221
+ x=(-1)^bit[0]*M*2^(E+1);
222
+
223
+ printf("x");
224
+
225
+ }
226
+
227
+ }
228
+
229
+ }
230
+
231
+ ```