Q中的大整数类型

时间:2019-01-10 11:50:31

标签: kdb

long不足以存储我做的数字/计算。

我试图从项目欧拉解决问题16: https://projecteuler.net/problem=16

但我不能,因为2 ^ 63的存储空间大于存储的空间

q)prod2: {[y] (y-1) {x*2}/ 2}
q)prod2(63)
0N
q)prod2(62)
4611686018427387904

(我需要计算prod2(1000)

1 个答案:

答案 0 :(得分:1)

您不能在长数据类型中存储那么大的数字,因为它超出了限制。有2个选择:

A)用支持Java等大整数的其他语言实现逻辑,然后在您的KDB进程中调用该代码。

B)如果要在KDB中实现此功能,则必须使用其他数据结构(例如向量或字符串)来存储大数字。

例如在布尔向量中表示2 ^ 62:

q) 1b,62#0b

阅读有关计算整数幂并实现其中之一的算法。还有一些算法可用于二进制表示。

您可以在此处了解更多信息:https://en.wikipedia.org/wiki/Exponentiation_by_squaring