【发布时间】:2019-12-13 15:39:26
【问题描述】:
我目前正在尝试将十进制值转换为 IEEE 754 半精度浮点格式,但在转换时遇到了一些问题。目前,此代码仅适用于转换为单精度格式。
如果我没记错的话,它默认将十进制值转换为单精度格式。否则,哪一行代码是这样做的?
否则,是否有其他方法可以解决我的问题?
#include <limits.h>
#include <iostream>
#include <math.h>
#include <bitset>
// Get 32-bit IEEE 754 format of the decimal value
std::string GetBinary32( float value )
{
union
{
float input; // assumes sizeof(float) == sizeof(int)
int output;
} data;
data.input = value;
std::bitset<sizeof(float) * CHAR_BIT> bits(data.output);
std::string mystring = bits.to_string<char,
std::char_traits<char>,
std::allocator<char> >();
return mystring;
}
int main()
{
// Convert 19.5 into IEEE 754 binary format..
std::string str = GetBinary32( (float) 19.5 );
std::cout << "Binary equivalent of 19.5:" << std::endl;
std::cout << str << std::endl << std::endl;
return 0;
}
上述代码的输出将给出01000001100111000000000000000000
但是,我想将其转换为 16 位格式。
编辑:不是重复的,因为这与精度错误无关。
【问题讨论】:
-
@user207421:您如何认为关于将值转换为 16 位浮点表示的问题与将 16 位浮点表示转换为值的问题重复?
-
虽然问题要求将“十进制”转换为半精度,但
GetBinary32的声明建议您要将float转换为半精度。float最常使用二进制表示。 “十进制”不是一个合适的术语,通常用于表示实数或用float表示的数字。如果您确实想将 IEEE-754 binary32 转换为 binary16,似乎有一个完整的解决方案 here。它以uint16_t的形式返回结果,您可以轻松地以二进制形式显示。
标签: c++ floating-point floating-point-conversion