Я думаю о гранулировании вашей таблицы.
Вместо того, чтобы иметь таблицу с кумулятивным значением для каждого значения кубика, вы можете создать целочисленный массив длины xN, где x в идеале - большое число, которое нужно увеличить.Точность вероятности.
Заполните этот массив, используя индекс (нормализованный по xN) в качестве кумулятивного значения, и в каждом «слоте» в массиве сохраните потенциальный бросок костей, если этот индекс выпадет.
Может быть, я мог бы объяснить проще на примере:
Используя три кубика: P (1) = 0,2, P (2) = 0,5, P (3) = 0,3
Создайте массив, в этом случае я выберу простую длину, скажем, 10. (то есть x = 3.33333)
arr[0] = 1,
arr[1] = 1,
arr[2] = 2,
arr[3] = 2,
arr[4] = 2,
arr[5] = 2,
arr[6] = 2,
arr[7] = 3,
arr[8] = 3,
arr[9] = 3
Затем, чтобы получить вероятность, просто рандомизируйте число от 0 до 10 ипросто получите доступ к этому индексу.
Этот метод может потерять точность, но увеличения x и точности будет достаточно.