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

C++ 将float类型更改为short,但其行为与float类型变量相同,c++,optimization,type-conversion,C++,Optimization,Type Conversion,有没有可能换个房间 float *pointer C++项目中使用的p>类型 到其他类型,这样它仍将作为浮动类型,但范围较小? 我知道在那个项目中浮点值永远不会超过某个固定值,所以我想通过使用内存来优化程序。“float*指针”的每个元素不需要4个字节,我认为2个字节就足够了。如果我将一个浮点值改为short,并模仿浮点值的行为,那么它将使用两倍于short的内存。怎么做 编辑: 它计算概率。所以有这样的分歧 A/B 其中A有很多代码使定点变得容易,我敢肯定还有很多C++类使它更容易,但我不

有没有可能换个房间

float *pointer
C++项目中使用的p>类型 到其他类型,这样它仍将作为浮动类型,但范围较小? 我知道在那个项目中浮点值永远不会超过某个固定值,所以我想通过使用内存来优化程序。“float*指针”的每个元素不需要4个字节,我认为2个字节就足够了。如果我将一个浮点值改为short,并模仿浮点值的行为,那么它将使用两倍于short的内存。怎么做

编辑:

它计算概率。所以有这样的分歧 A/B 其中AB(和A)也可以是1到10000。

可以使用定点数学吗?这完全取决于你想要达到的价值和精度


< C >有很多代码使定点变得容易,我敢肯定还有很多C++类使它更容易,但我不知道,我更喜欢C.< /P> < P>也许使用定点数学?这完全取决于你想要达到的价值和精度


< C >有很多代码使定点变得容易,我也很确定,也有许多C++类使它更容易,但我不知道有什么,我更喜欢C.< /P> < P>第一个明显的内存优化就是尝试去掉指针。如果您可以只存储浮点,那么根据更大的上下文,可能会将内存消耗从8个字节减少到4个字节。(在64位系统上,从12位到4位。)


你是否能通过一个短消息取决于你的程序如何处理这些值。您可以使用整数类型(例如短的“是”)使用定点算法,但您的问题显示的上下文太少,无法判断这一点。

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


你是否能通过一个短消息取决于你的程序如何处理这些值。你可以使用整型的定点算法,例如简短的“是”,但你的问题显示的上下文太少,无法判断。你发布的代码和问题中的文本不涉及实际的
浮点值,而是指向
浮点值的指针。在我所知道的所有体系结构中,指针的大小都是相同的,不管指针的类型是什么,因此将其更改为
short
char
指针不会有任何改进

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


在不了解您正在做什么的情况下,许多体系结构中
short
的范围是
[-32k,32k)
,其中
k
代表
1024
。如果您的数据范围是
[-32,32)
您可以使用大约3位十进制数字,您可以使用定点算法和
short
s,但这种情况很少。

您发布的代码和问题中的文本不处理实际的
float
,而是指向
float
的指针。在我所知的所有体系结构中,点的大小er与指针类型无关,因此将其更改为
short
char
指针不会有任何改进

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


在不了解您正在做什么的情况下,许多体系结构中
short
的范围是
[-32k,32k)
,其中
k
代表
1024
。如果您的数据范围是
[-32,32)
您可以使用大约3位十进制数字,您可以使用定点算术和
short
s,但这种情况很少。

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

写了一点关于它的内容,还介绍了一个转换半浮点数的例程

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

半小时: 一半。cpp


它提供“半浮点”作为一种可能的替换类型。

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

写了一点关于它的内容,还介绍了一个转换半浮点数的例程

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

半小时: 一半。cpp