Вычисление итерационной вероятности с использованием только длинных - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь вычислить итерационную вероятность, используя только длинные.Другими словами, я знаю, что могу вычислить эту вероятность с помощью замкнутой формы P (x) = 1- (1-p) ^ x, когда p - это вероятность на случай, а x - это число случаев.Но я не могу использовать числа с плавающей запятой, поэтому я не могу просто умножить итеративно.

Функция примет x (количество вхождений).Он будет иметь доступ к глобальным переменным для числителя и знаменателя p (например, d = 100 000 000 и n1 = 500 000 для ap 1/200).Затем он вернет long, n2, для которого P (итеративный) = n2 / d.

Я знаю, что в конечном итоге n2 подойдет к d, но для моих целей он никогда не должен так близко подходить.Я просто хочу иметь возможность делать это, не рискуя переполнением и имея только доступ к 64-битным регистрам.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Если у вас все в порядке с точностью, которую можно получить, скажем, с помощью знаменателя d = 100 000 000, то арифметика с рациональными числами достигнет того, что вы хотите сделать. Промежуточные результаты в ваших вычислениях могут потребовать более 64 бит, но в итоге вы бы округлили конечный результат до числителя и знаменателя в 64 бита.

0 голосов
/ 30 июня 2019

Если нет ограничений на значения аргумента, это невозможно.

Например, при p = 99/100 и x = 10 результат не может быть представлен 64-битными целыми числами.

И даже когда соотношение возможно, вы можете увидеть серьезную потерю точности.

...