【问题标题】:How to convert decimal to IEEE 754 Half Precision Format in C++? [duplicate]如何在 C++ 中将十进制转换为 IEEE 754 半精度格式? [复制]
【发布时间】: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


【解决方案1】:

c++ 中没有半精度(16 位)浮点的内置类型。 你必须自己计算价值。

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2016-01-31
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多