将两个单精度值打包成一个

时间:2014-03-16 23:32:52

标签: arrays labview

我正在使用非常有限的公羊工作。我有两个需要单精度的数组,因为我需要小数点。但是,单精度占用的空间太大,我使用的十进制值在0.00-1000.00之内。

有没有直观的方法将这两个阵列打包在一起,这样我可以节省一些空间?或者我可以采取不同的方法吗?

2 个答案:

答案 0 :(得分:2)

如果您需要代表0.00 - 1000.00,您已获得100000个值。这不能用少于17(整个)位表示。这意味着要输入两个数字,你需要34位。 34位显然比32位空间更适合。我建议你试着限制你的价值空间。您可以将11位专用于整数值(0 - 1023),将5位专用于十进制值(0到0.96875,以1/32或0.03125为块)。然后,您将能够将两个十进制值放入一个32位空间。

请记住,为此操作所需的额外位操作可能会对您的应用程序产生很小的性能影响。

答案 1 :(得分:1)

首先,要仔细检查你是否正确理解how LabVIEW stores data in memory以及你的VI是否为using more memory than they need to,这将是一个很好的一般建议。

如果您仍然需要将此数据压缩到最小空间,您可以执行以下操作:

  • 使用天花板的二维数组( n / 16)x 17 U16,而不是 n 值的一维数组。每个U16将从16个数据值中保存一位。
  • 要从数组中读取值 m ,请从数组的行 m / 16获取17 U16并获取位( m MOD 16)从每个U16,然后结合它们来创造你需要的价值。
  • 要写入数组,获取相关的17 U16,用表示新值的位替换每个的相关位,并替换阵列中更改的U16。

我想这不会很快,但也许您可以针对您需要对此数据执行的特定操作进行优化。

或者,您是否可以使用某种数据压缩?我想如果你可以将数据组织成包含一些设定数量的值的“页面”,那么这将是最好的。例如,您可以获取SGL的1D数组,将其展平为字符串,然后将压缩应用于字符串,并将压缩的字符串存储在字符串数组中。我相信OpenG包含拉链工具,例如。