C++ 是否可以将多个浮点值组合成一个浮点值,并在需要时提取这些值?
我正在为一个iPhone应用程序开发一个算法,我需要保存在内存中的数据超过了限制,所以可以将浮点数表示为一个浮点数,并在需要时检索这些值 例如: float array[4]; array[0]=0.12324; array[1]=0.56732; array[2]=0.86555; array[3]=0.34545; float combinedvalue=? 浮点数组[4]; 数组[0]=0.12324; 数组[1]=0.56732; 数组[2]=0.86555; 数组[3]=0.34545; 浮点组合值=?C++ 是否可以将多个浮点值组合成一个浮点值,并在需要时提取这些值?,c++,floating-point,C++,Floating Point,我正在为一个iPhone应用程序开发一个算法,我需要保存在内存中的数据超过了限制,所以可以将浮点数表示为一个浮点数,并在需要时检索这些值 例如: float array[4]; array[0]=0.12324; array[1]=0.56732; array[2]=0.86555; array[3]=0.34545; float combinedvalue=? 浮点数组[4]; 数组[0]=0.12324; 数组[1]=0.56732; 数组[2]=0.86555; 数组[3]=0.3454
不是一般的,不是。你不能只在N位中存储4N位的信息 如果你的数字中有一些规律,那么你可能会找到一个方案。例如,如果您的所有数字都具有相似的值,则可能只存储精度较低的数字之间的差异
然而,这种事情很困难,而且是有限的。一般来说不是,不。你不能只在N位中存储4N位的信息 如果你的数字中有一些规律,那么你可能会找到一个方案。例如,如果您的所有数字都具有相似的值,则可能只存储精度较低的数字之间的差异
然而,这类事情是困难的,而且是有限的。如果这些数字每个正好是5位数字,您可以将它们作为整数乘以100000。然后每个数字需要17位,总共68位,这(加上一些位移位)占用9个字节。这有帮助吗,9字节而不是16字节
请注意,算法的实现也会占用内存 如果这些数字正好是5位数字,则可以将它们与100000相乘,作为整数处理。然后每个数字需要17位,总共68位,这(加上一些位移位)占用9个字节。这有帮助吗,9字节而不是16字节
请注意,算法的实现也会占用内存 你需要的东西可以通过几种不同的方式来完成
例如,在C++中,通常有单精度浮点(4字节)作为最小的可用精度,不过如果有其他包处理较小的精度浮点值,我不会感到惊讶。 因此,如果您使用的是双精度浮点值,并且精度较低,则可以切换到较小的精度
现在,根据您要存储的值的范围,您可能也可以使用定点表示,但您需要熟悉位移位和掩蔽等的细微差别。但是,这种方法的另一个附加好处是,它可以使程序运行得更快,因为定点(整数)算术运算比浮点运算快得多选项的选择取决于您需要存储的数据以及您对低级二进制算法的适应程度。您需要的可以通过几种不同的方式来实现
例如,在C++中,通常有单精度浮点(4字节)作为最小的可用精度,不过如果有其他包处理较小的精度浮点值,我不会感到惊讶。 因此,如果您使用的是双精度浮点值,并且精度较低,则可以切换到较小的精度
现在,根据您要存储的值的范围,您可能也可以使用定点表示,但您需要熟悉位移位和掩蔽等的细微差别。但是,这种方法的另一个附加好处是,它可以使程序运行得更快,因为定点(整数)算术运算比浮点运算快得多选项的选择取决于您需要存储的数据以及您对低级二进制算法的适应程度。我怀疑是4个浮点数造成了问题。这很难做到,如果您尝试以特殊方式对其进行编码,则可能会丢失一些精度。告诉更多关于这个问题以及为什么你需要这么多内存,也许有人知道更好的方法。浮动不是你的问题。在你开始看到一个问题之前,你需要在内存中存储数千万个浮点数,此时的问题不是浮点数本身,而是导致你让这么多浮点数存活的算法选择。我怀疑是4个浮点数导致了这个问题。很难做到这一点,如果你试图以一种特殊的方式对其进行编码,你可能会失去一些精确性。告诉更多关于这个问题以及为什么你需要这么多内存,也许有人知道更好的方法。浮动不是你的问题。在你开始看到一个问题之前,你需要在内存中存储数千万个浮点数,此时的问题不是浮点数本身,而是导致你让这么多浮点数存活的算法选择。