2012-03-26 8 views
-2

私は、「1/4、3/4、7,5」のような小数部を持ち、出力11100101 < =のcでプログラムを作成するという個人的なプロジェクトに取り組んでいますこれはちょうどアイデアを与えることです。しかし、私がそれをする前に、私はバイナリで分数を表現する手順が何であるか知る必要があります。私が感謝するすべての助け。バイナリで分数を表現する方法

+1

「これは正しくありません」 - 正しい*の例を示してください。どのような分数の2進表現を提案しますか? –

+0

(10進数)3/4(バイナリ)11/100 –

+2

"1/4、3/4、7,5"は "端数"ではなく、 "11100101"(またはそれについては2進数字の任意の文字列)。あなたの質問に言い換えてください。 –

答えて

2

は、そのためのカスタム型を作成いただきありがとうございます:

typedef struct { 
     int numerator; 
     unsigned int denominator; 
} my_fract; 

あなたのユースケースに応じて、分子と分母のために、異なるサイズを持つことができます。

これで、分子と分母、あるいは浮動小数点数または二重整数を取るコンストラクタを追加できます。そして、たぶん、浮動小数点数を出力し、再び倍精度に変換するコンバータは、この型の "自然な"算術演算がないので、もしあなたがそれを望むのであれば、自分でそれを行う必要があります。

my_fract make_fract(int numerator, unsigned int denominator) 
{ 
     my_fract res; 
     res.numerator = numerator; 
     res.denominator = denominator; 
} 

double fract_to_double(my_fract foo) 
{ 
     return (double)foo.numerator/(double)foo.denominator 
} 

などとなる。

関連する問題