在运行时定义double或float的精度/大小

时间:2016-11-03 23:25:55

标签: c++ floating-point bit-manipulation precision

我正在创建一个C ++数字信号应用程序,它需要在运行时设置操作数的精度或大小。

我知道通常,doublefloat类型通过IEEE 754标准保证最小长度,但与int类型一样,这些只是最小长度。

有哪些选项可用于定义可在运行时定义的可自定义长度的浮点类型?理想情况下,现有的库或类型,但我的另一个粗略的想法是使用位掩码在每次操作后删除数字的最后 n -bits。

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用union

union S
{
    std::int32_t n;     // occupies 4 bytes
    std::uint16_t s[2]; // occupies 4 bytes
    std::uint8_t c;     // occupies 1 byte
}; 

由于有些人无法访问引用的WebPage,请尝试以下示例:

   Union S
{
    Double H;
    float L;
};

您将使用相同的空格,但将相应的值分配给所需的变量。

答案 1 :(得分:0)

你是否考虑过“位字段”?它适用于整数类型。 或者,您可以通过将十进制类型存储在结构中的两个不同变量中的一个部分和组成部分并设置它们的位字段来使事物有点定制。有点像...

struct Number{
int integral:4;
int decimal:6;
};