DecimalをBinaryに変換して戻すプログラムを作成しようとしています。私の問題は、小数部分がバイナリで大きすぎてプログラムがクラッシュするときです。私はこの問題に多くの異なるアプローチを試みましたが、それらのどれも働いていませんでした...なぜそれが起こるのかわかりませんので、私はそれのための解決策がありません。 このプログラムには問題のみが含まれています。Cで商を使った10進数から2進数への変換
私を助けてください。
example1: 10 10.5 -> Program works fine
example2:10 10.23 -> Program crashes
上記は例です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(){
int base;
double number;
scanf("%d %lf",&base,&number);
if(base == 10){
//Integer Part
int n = (int)number;
number = number - (double)n;
int i = 0;
char *binaryfirst;
binaryfirst = malloc(sizeof(char*));
while(n != 0){
binaryfirst[i] = (n % 2) + '0';
n /= 2;
i++;
}
binaryfirst[i] = '\0';
strrev(binaryfirst);
//printf("%lf\n%s\n",number,binaryfirst);
//Fractional part
int j = 0;
char *binarysecond;
binarysecond = malloc(sizeof(char*));
//This is The part where I am lost...
for(j = 0; j < 60; j++){ //60 is the maximum length that it can become
number *= 2;
if(number >= 1.0){
binarysecond[j] = '1';
number = number - 1;
}else if(number == 0){
binarysecond[j] = '0';
break;
}else{
binarysecond[j] = '0';
}
printf("%lf; %c\n",number, binarysecond[j]);
}
printf("%d\n",j);
binarysecond[j] = '\0';
//printf("\n%s\n",binarysecond);
//Memory "Let it go"!!!!
/* for(i = 0; i < sizeof(binaryfirst); i++){
free(binaryfirst[i]*2);
}*/
free(binaryfirst);
/* for(j = 0; j < sizeof(binarysecond); j++){
free(binarysecond[j]);
}*/
free(binarysecond);
}
return 0;
}
ご参考までに不要なものをコードから削除することができます。これにはコメントアウトされたコードとうまく動作するコードが含まれます。問題を示すコードだけを残してください。この問題は見やすいのでここでは必要ではありませんでしたが、他の場合には必要になるかもしれません。ここをクリック:[mcve] – anatolyg