2013-08-10 4 views
-1

Мне нужно решить проблему на C++, в которой я должен вычислить модуль числа, образованного как 10^n. Но проблема в том, что n - число с плавающей запятой, поэтому, если я вычисляю 10^n как pow (10.0, n), тогда он может переполняться. Поэтому я ищу решение, которое может вычислять 10^n mod m без проблемы переполнения. Я обычно использую Python, где это очень просто, я не знаю, как решить на C++.Как рассчитать mod log (n) для больших значений n

+0

Modulus не определен для чисел с плавающей точкой: если показатель степени с плавающей точкой , то выражение 'X^e' может привести к плавающей запятой. – Nawaz

+0

log (n)! = 10^n ... Вы имеете в виду exp (n)? –

+0

моя ошибка, я отредактировал вопрос. Если мне задано n = log (num), то я хочу найти 10^n% m, где n может быть числом с плавающей запятой. –

ответ

-2

Как насчет rounding сначала, сохраняя цифры меньше 1 в переменной float (вы получите их, вычитая округленную переменную из исходного поплавка), а затем сделайте по модулю округленное значение. После этого добавьте переменную поплавка

Будет ли это решить вашу проблему?

EDIT (см комментарий и для лучшего взгляда ;-))

10^7.4 = 25118864.315[...] 
--> round = 25118864, 
    float = 0.315, 
    round % 6 = 2, 

--> (10^7.4)%6 = 2 + 0.315 = 2.315 

в известково на окнах даст вам

+0

Рассмотрите это, например, 10^7.4 mod 6. Таким образом, значение float равно 0.6, а округленное значение равно 7. 10^7 mod 6 дает 4, и если мы добавим значение float, оно будет 4.6. И правильный ответ - 2.315. –

+0

no i означает круглый (10^7.4) – Martin

+0

для лучшего понимания ... 10^7.4 = 25118864.315 [...] -> round = 25118864, float = 0.315, round% 6 = 2, (10^7.4)% 6 = 2 + 0,315 = 2,315, что то, что calc при окнах даст вам – Martin

Смежные вопросы