小数を対応する2進形式に変換するために、次のC++コードを記述しました。
double get_decimal_part(double num) {
long x = static_cast<long>(num);
return (num - static_cast<double>(x));
}
long get_real_part(double num) {
return static_cast<long>(num);
}
string fraction_to_binary(double num) {
string decimal_binary = "";
double decimal_part = get_decimal_part(num);
while ( decimal_part > 0 ) {
double temp = decimal_part * 2;
if ( get_real_part(temp) == 0 ) decimal_binary += "0";
else decimal_binary += "1";
decimal_part = get_decimal_part(temp);
}
return decimal_binary;
}
int main() {
cout << "3.50 - " << fraction_to_binary(3.50) << endl;
cout << "3.14 - " << fraction_to_binary(3.14) << endl;
}
出力は次のようになります:-
3.50 - 1
3.14 - 001000111101011100001010001111010111000010100011111
私は同じことに関して次の質問があるでしょう:-
- 「3.50」の場合、実装は出力として「1」を返します。3.50の末尾の「0」を説明するために実装を変更するにはどうすればよいですか?
- 浮動小数点数の精度を取得するのに役立つライブラリ関数があった場合はどうなりますか?その情報を使って実装を変更できると思います。
[編集]また、以下を使用してフロートを文字列に変換しようとしましたが、どちらも役に立ちませんでした。
stringstream ss;
ss << my_float;
cout << string(ss.str()) << endl;