"模拟"具有两个32位整数的64位整数

Pho*_*non 5 c c++ java large-data-volumes 32bit-64bit

我正在为移动设备编写一个计算量很大的程序,而我只限于32位CPU.本质上,我正在执行大量数据的点积(> 12k签名的16位整数).浮点运算速度太慢,所以我一直在寻找一种用整数类型执行相同计算的方法.我偶然发现了一个名为Block Floating Point算法的东西(链接文件中的第17页).它做得非常好,但是现在我遇到了一个32位的问题,只是不足以以足够的精度存储我的计算输出.

只是为了澄清,它不够精确的原因是我必须大幅降低每个数组元素的精度才能得到一个最终适合32位整数的数字.这是大约16000件事情的总和,这让我的结果如此巨大.

有没有办法(我喜欢对文章或教程的引用)使用两个32位整数作为最重要的单词和最不重要的单词定义它们的算术(+, - ,*,/)来处理数据有效率的?还有,有没有更好的方法来做这些事情?这种方法有问题吗?我对使用的编程语言非常灵活.我更喜欢C/C++,但java也可以.我确定之前有人这样做过.

Pup*_*ppy 7

我很确定JVM必须支持64位算术long类型,如果平台不支持它,那么VM必须模拟它.但是,如果您无法负担float性能问题,那么JVM可能会破坏您.

大多数C和C++实现将提供针对32位目标模拟的64位算法 - 我知道MSVC和GCC都可以.但是,您应该知道您可以讨论许多整数指令来保存单个浮点指令.您应该考虑该程序的规范是不合理的,或者您可以从其他地方释放性能.

  • 不必要.有一些常见的处理器(例如ARM926)没有FPU,但它们具有硬件加速功能,可以动态地将Java字节码转换为本机指令,从而使Java几乎与本机代码一样快. (2认同)