Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;模拟;包含两个32位整数的64位整数_Java_C++_C_32bit 64bit_Large Data Volumes - Fatal编程技术网

Java &引用;模拟;包含两个32位整数的64位整数

Java &引用;模拟;包含两个32位整数的64位整数,java,c++,c,32bit-64bit,large-data-volumes,Java,C++,C,32bit 64bit,Large Data Volumes,我正在为一个移动设备编写一个计算量非常大的程序,我只限于32位CPU。本质上,我正在执行大量数据集的点积(>12k有符号16位整数)。浮点运算太慢了,所以我一直在寻找一种方法,用整数类型执行相同的计算。我偶然发现了一种叫做算术的东西(链接文章第17页)。它做得很好,但现在我面临的问题是32位不足以以足够的精度存储我的计算结果 只是想澄清一下,精度不够的原因是,我必须大幅降低每个数组元素的精度,以便最终将数字拟合为32位整数。这是16000件事情的总和,使我的结果如此巨大 有没有一种方法(我想参考

我正在为一个移动设备编写一个计算量非常大的程序,我只限于32位CPU。本质上,我正在执行大量数据集的点积(>12k有符号16位整数)。浮点运算太慢了,所以我一直在寻找一种方法,用整数类型执行相同的计算。我偶然发现了一种叫做算术的东西(链接文章第17页)。它做得很好,但现在我面临的问题是32位不足以以足够的精度存储我的计算结果

只是想澄清一下,精度不够的原因是,我必须大幅降低每个数组元素的精度,以便最终将数字拟合为32位整数。这是16000件事情的总和,使我的结果如此巨大


有没有一种方法(我想参考一篇文章或一篇教程)可以使用两个32位整数作为最高有效字和最低有效字,并在它们上面定义算术(+、-、*、/)来高效地处理数据?还有,有没有更好的方法来做这些事情?这种方法有问题吗?我使用的编程语言相当灵活。我更喜欢C/C++但java也可以。我肯定以前有人这样做过。

我非常肯定JVM必须支持64位算术
long
类型,如果平台不支持它,那么VM必须模拟它。然而,如果您不能负担使用
float
解决性能问题,那么JVM可能会毁了您


<>大多数C和C++实现将为32位目标提供64位算术仿真,我知道MSVC和GCC做的。但是,您应该知道,您可以使用许多整数指令来保存单个浮点指令。你应该考虑这个程序的规范是不合理的,或者也许你可以从其他地方免费的性能。

< P>在维基百科页面上有一个关于任意精确算术的。也许上面的某些内容适合您?

是的,只需使用64位整数:

long val; // Java

#包括
int64_t val;//C

如果你能使用Java,简短的回答是:使用Java long's。Java标准定义了长达64位的字符串。任何JVM都应该实现这一点,否则它就不符合标准。不需要CPU来支持64位算术。如果本机不支持它,JVM应该用软件实现它

如果您确实有一些不支持long的残废Java,请使用biginger。它处理任意大的整数。

谈论C/C++。
任何普通编译器都支持“long-long”类型,即所有普通算术运算的64位整数。

结合-O3,它很有可能在您的平台上为64位算术输出尽可能好的代码。

我有一个愚蠢的问题-为什么您不能使用长的,即使在32位cpu上也是64位的?愚蠢的答案是可以。我被一份文件误导了。谢谢=)考虑切换到本机代码。不是在java中,它不是-在java中-短总是16位,整数32位,长64位。C++对分配给数据类型的位数的解释依赖于编译器,这一点已经不多见了。在Java中,您总是会得到相同的位表示。“如果您不能负担使用浮点来解决性能问题,那么JVM可能会毁掉您。”-不是这样。许多手机运行JVM很好,但没有FPU,这使得浮点操作非常昂贵。有些甚至不支持本机应用程序,因为操作系统本身是用Java编写的。@BlueRaja:当然,但JVM运行的成本比模拟浮点值要高得多。不一定。有些常见的处理器(如ARM926)没有FPU,但具有硬件加速功能,可以动态地将Java字节码转换为本机指令,使Java几乎与本机代码一样快。
#include <stdint.h>
int64_t val; // C