【问题标题】:changing float type to short but with same behaviour as float type variable将浮点类型更改为短但与浮点类型变量具有相同的行为
【发布时间】:2010-07-23 07:28:01
【问题描述】:

可以改吗

float *pointer

在 VS c++ 项目中使用的类型 到其他类型,以便它仍然表现为浮动类型但范围更小? 我知道浮点值永远不会超过该项目中的某个固定值,所以我想通过它使用的内存来优化程序。 'float *pointer' 的每个元素不需要 4 个字节,我认为 2 个字节就足够了。如果我将浮点数更改为短并模仿浮点行为,那么它将使用两倍短的内存。怎么做?

编辑:

它计算概率。所以有像 甲/乙 其中 A

【问题讨论】:

  • 您希望结果在什么范围内?有多少十进制数字对您很重要?
  • @David Rodríguez - dribeas 我认为整数部分后有 3 或 4 位数字

标签: c++ optimization type-conversion


【解决方案1】:

IEEE 754-2008 中描述了一种标准的 16 位浮点格式,称为“binary16”。它被指定为存储精度降低的浮点值的格式。目前几乎没有编译器支持(我认为 GCC 支持某些 ARM 平台),但很容易滚动您自己的例程。这家伙:

http://blog.fpmurphy.com/2008/12/half-precision-floating-point-format_14.html

写了一些关于它的内容,并提供了一个转换半浮点浮点的例程。

另外,这里似乎是一个半浮点 C++ 包装器 类:

半.h: http://www.koders.com/cpp/fidABD00D95DE84C73BF0218AC621E400E07AA77B53.aspx 半.cpp http://www.koders.com/cpp/fidF0DD0510FAAED03817A956D251787609BEB5989E.aspx

提供“HalfFloat”作为可能的直接替换类型。

【讨论】:

    【解决方案2】:

    也许使用定点数学?这完全取决于您想要达到的价值和精度。

    http://www.eetimes.com/discussion/other/4024639/Fixed-point-math-in-C

    对于 C 来说,有很多代码可以让定点变得简单,我很确定还有很多 C++ 类可以让它变得更简单,但我不知道,我更喜欢 C .

    【讨论】:

      【解决方案3】:

      第一个明显的内存优化是尝试摆脱指针。如果您可以仅存储浮点数,则可能会根据更大的上下文将内存消耗从 8 个字节减少到 4 个字节。 (在 64 位系统上,从 12 到 4。)

      是否可以使用short 取决于您的程序如何处理这些值。您也许可以使用整数类型(例如 short)来使用定点算术,是的,但是您的问题显示的上下文太少,无法判断。

      【讨论】:

        【解决方案4】:

        您发布的代码和问题中的文本不涉及实际的float,而是指向float 的指针。在我所知道的所有架构中,无论指向的类型如何,指针的大小都是相同的,因此将其更改为 shortchar 指针不会有任何改进。

        现在,关于实际的指向元素,您在应用程序中期望的范围是多少?您需要的精度是多少?你有多少这些元素?您的目标平台的内存限制是什么?除非范围和精度很小并且元素数量很大,否则只需使用floats。另请注意,如果您需要浮点运算,则存储任何其他类型都需要在每次运算之前和之后进行转换,您可能会影响性能。

        如果你不知道你在做什么,short 在许多架构中的范围是[-32k, 32k),其中k 代表1024。如果您的数据范围是 [-32,32),并且您可以使用大约 3 个十进制数字,您可以使用 shorts 的定点运算,但这种情况很少。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-09
          • 2013-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-11
          • 1970-01-01
          相关资源
          最近更新 更多