【发布时间】:2011-09-12 13:45:26
【问题描述】:
我正在为移动设备编写一个计算量非常大的程序,并且仅限于 32 位 CPU。本质上,我正在执行大量数据(>12k 有符号 16 位整数)的点积。浮点运算太慢了,所以我一直在寻找一种方法来使用整数类型执行相同的计算。我偶然发现了一种叫做 Block Floating Point 算术的东西(链接论文的第 17 页)。它做得很好,但现在我面临 32 位的问题,只是不足以以足够的精度存储我的计算输出。
澄清一下,精度不够的原因是我必须大幅降低每个数组元素的精度,才能最终得到一个适合 32 位整数的数字。大约 16000 件事情的总和使我的结果如此巨大。
有没有办法(我希望参考一篇文章或教程)使用两个 32 位整数作为最高有效字和最低有效字并在它们上定义算术(+ , -, *, /) 来有效地处理数据?此外,是否有更好的方法来做这些事情?这种方法有问题吗?我对我使用的编程语言相当灵活。我更喜欢 C/C++,但 java 也可以。我敢肯定以前有人这样做过。
【问题讨论】:
-
我有一个愚蠢的问题 - 为什么你不能使用 long,即使在 32 位 cpu 上也是 64 位?
-
愚蠢的答案是可以。我被一份文件误导了。谢谢=)
-
考虑切换到本机代码。
-
不是在 java 中它不是 - 在 java - 短总是 16 位,整数 32 位,长 64 位。这里不再长了
-
C++ 对分配给数据类型的位数的解释取决于编译器。在 Java 中,您总是得到相同的位表示。
标签: java c++ c 32bit-64bit large-data-volumes