【发布时间】:2020-06-19 23:33:57
【问题描述】:
#include <iostream>
#include <sstream>
using namespace std;
main()
{
float input = FLT_MAX;
std::ostringstream buff;
buff.precision(39);
buff << input;
cout << buff.str();
}
如何将浮点数或双精度数转换为十进制以外的基数? 我想以这些基数表示数字:2; 4; 8个; 16; 32; 64.
但即使使用 unsigned long long int 也是不够的,因为它无法存储如此高指数的数字。
有什么想法吗?
编辑: 我也想转换 DBL_MAX,因为我正在开发一个应该查找和显示基本数据类型限制的程序。
此代码在第二次迭代时失败:
#include <iostream>
#include <math.h>
using namespace std;
main()
{
float input = FLT_MAX;
cout.precision(39);
while (floor(input) != 0)
{
cout << input << endl;
input /= 10;
}
}
除了使用任意精度算术之外,谁能想到其他方法?
【问题讨论】:
-
标准流不对浮点数 IIRC 执行此操作。您必须自己将它们转换为字符串。
-
以什么形式打印?符号、分数和指数?
-
十进制,可能带有指数,例如0.333333333333̅₍₁₀₎ = 0.1₍₃₎,或 1e-1₍₃₎(想不出二进制或其他列出的系统中的示例)
-
做好这件事真的很难。人们获得研究这种东西的博士学位。做一个半途而废的工作相当容易,如果这足够好,你在这里得到的答案可能会奏效。