为了在0-1
互斥之间存储值,我分配了以下缓冲区:
float *buff = malloc(n* sizeof(float))
但是,我认为在分配较小的内存大小时,使用
float
不能自由选择较大的n
,例如n=10,000
。由于float的大小为32 bit
,我想知道是否存在另一种方法来通过变通办法或选择其他数据类型来减小此大小。
最佳答案
C没有小于float
的浮点类型。
有几种可能(但不保证)小于float
的整数类型:signed char
unsigned char
signed short
unsigned short
当然,unsigned
类型不能容纳负值,然后没有一个可以容纳分数。
您可以始终定义自己的类型,例如仅将signed char
值(通常在-128
.. +127
范围内)解释为小数值。我看过16位浮点布局,以为C或大多数硬件都不直接支持它们。
请注意,执行缩放的其他代码的大小可能会超过您保存的数据大小。另一方面,代码和数据大小不一定可以互换。
如果我们对您要表示的值的范围和精度有更多了解,那么回答您的问题会容易得多。
请注意,除非您在小型嵌入式系统上,否则分配10,000个float
对象的数组可能很简单。除非您确定有必要,否则不要在使用较小的类型上花费过多的精力。
关于c - 我们可以找到另一个小于float的数据类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583488/