【问题标题】:Defining the precision/size of a double or float at runtime在运行时定义双精度或浮点数的精度/大小
【发布时间】:2016-11-03 23:25:54
【问题描述】:

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

我知道,通常情况下,double 和 float 类型由 IEEE 754 标准保证最小长度,但是与 int 类型一样,这些只是最小长度。

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

【问题讨论】:

  • 我怀疑你误解了什么。没有通用的方法可以在运行时设置浮点操作数的大小。正如您所建议的那样,屏蔽额外的位会使事情变得非常缓慢,这是数字信号处理中的诅咒。
  • 将int 与分子和分母一起使用?
  • IEEE 754 定义了几个 exact 大小。您正在寻找一个离题的外部库。
  • @EJP 我正在寻找任何有效的方法来满足我的要求,可以是标准库或下面讨论的方法

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


【解决方案1】:

您是否考虑过“位域”?它虽然适用于整数类型。 或者可能是,您可以通过将十进制类型存储在一个部分中并将整数部分存储在结构中的两个不同变量中并设置它们的位字段,从而使事情变得有点定制。比如……

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

【讨论】:

    【解决方案2】:

    您是否考虑过使用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
    }; 
    

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

       Union S
    {
        Double H;
        float L;
    };
    

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

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多