2013-05-24 4 views
0

Я пытаюсь найти логарифм очень большого BigInteger в C#. Мне все равно, что такое база логарифма. Когда я пытаюсь это:Поиск журнала большого BigInteger работает неправильно?

BigInteger b = 1000; // the base 
// myBigInt is a huge BigInt i want to find the Log of. 

exponent = BigInteger.Log(myBigInt, 1000); //Find the Log 
// Re-create the orignal BigInt now that I know base and exponent 
BigInteger.Pow(b, Convert.ToInt32(exponent)); 

я получаю исключение переполнения, поскольку Int32 не может удержать результат Лога. Увеличение значения базы не работает.

+0

Вы можете разместить больше кода вашего отсутствуют некоторые переменные здесь. – TheKingDave

+0

@ TheKingDave Хорошо, я объяснил переменные и упростил их. Я надеюсь :) – Jonathan

+0

Пробовал это и показатель степени в моем случае - значение с плавающей запятой. Почему вы конвертируете его в int? Я попробовал его с ОЧЕНЬ большим myBigInt, и он все равно не падает. – TheKingDave

ответ

0

Вы не используете один и тот же базис в журнале и POW

BigInteger bigInt = 10000000000000000000; // myBigInt is a huge BigInt i want to find the Log of. 
double log; 
log = BigInteger.Log(bigInt, 1000); //Find the Log 
System.Diagnostics.Debug.WriteLine(log.ToString()); 
System.Diagnostics.Debug.WriteLine(((Int32)log).ToString()); 
BigInteger bigIntRecreate; 
// unless log is an integer value it will round down and will not recreate to proper value 
bigIntRecreate = BigInteger.Pow(1000, (Int32)log); 
System.Diagnostics.Debug.WriteLine(bigInt.ToString("N0")); 
System.Diagnostics.Debug.WriteLine(bigIntRecreate.ToString("N0")); 
System.Diagnostics.Debug.WriteLine((bigInt - bigIntRecreate).ToString("N0")); 
+0

спасибо, сейчас он работает. Кажется, я не могу поддержать кого-либо из вас, к сожалению, я здесь новый. – Jonathan

+0

Вы можете отметить ответ правильно, нажав галочку. – Paparazzi

+0

упс, не заметил этого. Готово. – Jonathan