gpt4 book ai didi

将分数转换为二进制的 C++ 代码

转载 作者:行者123 更新时间:2023-11-28 00:50:32 25 4
gpt4 key购买 nike

为了将小数转换为相应的二进制格式,我刚刚编写了以下 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

我有以下关于相同的问题:-

  1. 如果是“3.50”,我的实现会给出“1”作为输出——我如何才能修改我的实现以解决 3.50 中尾随的“0”?
  2. 是否有任何库函数可以帮助我获得 float 的精度?我猜想我可以使用该信息来修改我的实现。

[编辑]我还尝试使用以下方法将 float 转换为字符串,但它也无济于事。

   stringstream ss;
ss << my_float;
cout << string(ss.str()) << endl;

最佳答案

在回答你的具体问题之前,有什么问题 modf为了这?

关于您的具体问题:

  1. 什么尾随"0" ?你说的是文字代表在这里。机器内部,"3.5""3.50"对应相同的数字,具有相同的表示。

  2. 有一个库函数返回a的精度 float :std::numeric_limits<double>::digits(除了它不是一个函数,而是一个常量)。但如果你想把一个数字分解成它的整数和整数零件,modf完全符合要求。与您的代码不同,将实际工作,对于 double 的所有值.

编辑:

仔细观察你正在尝试做的事情的大局做:我的方法是使用 frexp提取基数 2指数,然后 ldexp将数字缩放到范围内 [0.5...1)然后循环std::numeric_limits<double>::digits次,每次乘以2 ,并检查:如果乘法结果小于1,则插入一个0数字;否则,插入一个 1 数字并减去 1。(注意如果机器 float 以 2 为底,或 2 的幂。)

关于将分数转换为二进制的 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14303469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com