Перевод числа с плавающей точкой в бинарное

207
30 октября 2019, 21:50

Написал функцию, которая, как мне хочется, должна переводить дробное число в двоичное, но она не работает. Целая часть числа преобразуется в двоичное с помощью встроенной функции itoa(int, char array, 2); , для остатка после точки я написал свою функцию dec_bin, в которой число умножается на 2, потом первый символ запоминается, меняется на 0 и так далее...

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
string dec_bin(string dec, int steps) {
    double decimal = stof(dec); // 0.987
    string str_decimal = "";
    string decimal_bin = "";
    for(int i = 0; i < steps; i++) {
        decimal *= 2; //1.974
        str_decimal = to_string(decimal);
        decimal_bin += str_decimal[0];                  // "1", "11", "111" ...
        str_decimal = str_decimal.replace(0, 1, "0"); //  "0.974"
        decimal = stof(str_decimal);                    // 0.974
    }
    return decimal_bin;

}
string float_to_bin(string input, int steps) {
    string result, whole;
    short sign = 0; // + by default
    char whole_bin[20];
    if(input.find('-') != -1) // in "-1.974"
        sign = 1; // for -1.974
    int point_pos = input.find('.');
    if(point_pos != -1) {
        whole = input.substr(0, point_pos);
        string dec = "0" + input.substr(point_pos, input.size() - point_pos);  //"0.987"
    }
    else {
        whole = input;
    }

    int int_whole = stoi(whole);
    itoa(int_whole, whole_bin, 2); //""
    if(point_pos != -1) {
        string dec_bin;
    }



    if(point_pos != -1) {
        string whole_bin_res(20, whole_bin); // convert char to string
        result =whole_bin_res + "." + dec_bin(to_string(dec), steps);
    }
    else 
        result = whole_bin;

    return  sign, result;
}


int main(int argc, char* argv[]) {
    cout << "Enter a decimal number: ";
    string input = "12.987";
    cout << float_to_bin(input, 3);

    return 0;
}
READ ALSO
Низкоуровневый звуковой API в Linux

Низкоуровневый звуковой API в Linux

Как в Linux возможно низкоуровнево отрендерить звук? (отослать на звуковое устройство частоту звука и воспроизвести её)

164
Помогите добавить условие в функцию [закрыт]

Помогите добавить условие в функцию [закрыт]

Помогите правильно добавить условие сортировки от 1 найденного четного числа в массиве до последнего, те

167
Как определить число букв в массиве?

Как определить число букв в массиве?

Здравствуйте, у меня такая проблемаМне нужно узнать число букв в массиве

169