実数を2進数表記する

問題

double型の0から1の実数を2進数表記する。

考え方

簡単な例として0.5は2進数では0.1とかける。  0.5 = 1 \times \frac{1}{2} + 0 \times \frac{1}{4} + \cdots

つまり、2倍して1のくらいが1になれば1を立てる。

コード例

#include<iostream>
#include<string>
using namespace std;

string bitRep(double x){
    string ans = "0.";
    while(x!=0){
        if(ans.length()==34)return "Error!";
        x = x*2;
        if(x>=1){
            ans.append("1");
            x--;
        }else{
            ans.append("0");
        }
    }
    return ans;
}

int main(void){
    double x = 0.75;
    string ans;
    ans = bitRep(x);
    cout << ans << endl;
    return 0;
}

参考

CRACKING the CODING INTERVIEW - Home