Большой целочисленный тип в Q - PullRequest
0 голосов
/ 10 января 2019

long не "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 голосов
/ 10 января 2019

Вы не можете хранить число с большим значением в длинном типе данных, поскольку оно выходит за его пределы. Есть 2 варианта:

A) Реализуйте свою логику на другом языке, который поддерживает большие целые числа, такие как Java, и вызывайте этот код в своем процессе KDB.

B) Если вы хотите реализовать это в KDB, вам придется использовать другие структуры данных, такие как vector или string, для хранения большого числа.

Например, для представления 2 ^ 62 в логическом векторе:

q) 1b,62#0b

Прочтите об алгоритмах для вычисления целых степеней и реализации одного из них. Есть также алгоритмы, которые работают на двоичном представлении.

Вы можете прочитать больше здесь: https://en.wikipedia.org/wiki/Exponentiation_by_squaring

...