将float类型更改为short,但行为与float类型变量相同

时间:2010-07-23 07:28:01

标签: c++ optimization type-conversion

是否可以更改

float *pointer

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

编辑:

计算概率。所以有一些分歧 A / B. 其中A< B, 并且B(和A)也可以是1到10000。

4 个答案:

答案 0 :(得分:2)

也许使用定点数学?这一切都取决于你想要达到的价值和精确度。

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

对于C,有很多代码可以使定点变得简单,我很确定还有很多C ++类使它更容易,但我不知道,我更喜欢C语言

答案 1 :(得分:2)

IEEE 754-2008中描述了标准的16位浮点格式,称为“binary16”。它被指定为存储具有减少的精度的浮点值的格式。目前几乎没有编译器支持(我认为GCC支持某些ARM平台),但是很容易推出自己的例程。这位老乡:

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

写了一些关于它的内容,并提出了一个转换半浮动的例程< - >浮动。

此外,这里似乎是半浮动 C ++包装类:

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

提供“HalfFloat”作为可能的替代类型。

答案 2 :(得分:1)

第一个显而易见的内存优化是试图摆脱指针。如果你可以只存储浮点数,那么根据更大的上下文,可能已经将内存消耗从8个字节减少到4个字节。 (在64位系统上,从十二到四。)

你是否可以通过短期取决于你的程序对值的作用。您可以使用整数类型(例如short)来使用修正点算法,但是您的问题显示的方式太少,无法判断。

答案 3 :(得分:0)

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

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

如果不了解您的工作情况,许多架构中short的范围为[-32k, 32k),其中k代表1024。如果您的数据范围是[-32,32),并且您可以使用大约3个十进制数字,则可以使用short s的定点运算,但这种情况很少。