В sql2014 у меня есть таблица с 4 целыми числами (W, X, Y, Z) и bigint B. B = C (X, Z) * C (WX; YZ) где C (n, k) обозначает комбинации k объектов, взятых из n объектов, то есть обычный n!/[k! (nk)!]Как рассчитать большую комбинаторную сумму в tsql
Наибольшее значение W, X, Y и Z равно 40, так что самый большой B равен 1.37847E + 11 Я могу рассчитать правильные значения с помощью Excel (используя функцию COMBIN), но я не могу сказать то же самое в SQL. Я могу создать таблицу со всеми комбинациями W, X, Y, Z, которые мне нужны, но когда я пытаюсь вычислить B для больших значений, я не знаю, как относиться к вещам типа «40!».
Я хотел бы использовать КТР с preinserted значений факториала, что-то вроде:
;WITH factorials AS(
SELECT 2 as N, 2 AS F
UNION ALL
SELECT 3,6
UNION ALL...
)
, но я не знаю, как хранить 40! и тому подобное.
Использование .NET для заполнения таблицы не является вариантом, это должно быть сделано SQL.
Я даже подумал о том, чтобы использовать таблицу, аналогичную CTE, и хранить факториал в двух или трех столбцах, первый хранится миллиарды, второй хранится миллиарды миллиардов и т. Д. (С использованием INT), но тогда я не знаю как сделать разбиения среди чисел, хранящихся таким образом, как в (Ax10^9 + B)/(Cx10^9 + D).
Как управлять целыми числами больше, чем bigint в tsql?
прямо сейчас я думаю о хорошем старом разделении среди полиномов ... и кажется почти тривиальным ... но это не так! потому что мне все еще нужно обрабатывать слишком большие цифры, возможно, –