Страница 1 из 1

Длинная арифметика без длинной арифметики

Добавлено: 19 мар 2008, 11:26
WarMaster
Как в принципе сравнить число в степени с другим, не используя длинную арифметику? Возможно ли это вообще?

Re: Длинная арифметика без длинной арифметики

Добавлено: 19 мар 2008, 11:44
airyashov
а такое сравнение

a^b сравниваем a[j]^b[j]
b*ln[a] сравниваем b[j]*ln[a[j]]
только насчет быстроты проверить надо, одно произведение всегда известно получается

Re: Длинная арифметика без длинной арифметики

Добавлено: 19 мар 2008, 15:06
somewhere
airyashov, идея хорошая и очень близка к истине. Давайте вспомним.... или узнаем ))), что при сравнении двух степенных функций с одинаковыми основаниями, большей считается та, у которой больше показатель степени. Отсюда вывод - привести массив, в котором хранятся основания - к одному. Например к числу E, так проще считать будет. Тогда a[k] = E^P, и нам достаточно потом сохранить в a[k] = Ln(a[k]). Большей будет считатся та, у которой a[k]*b[k] максимальна. Понятна идея? Скорость - фактор не значительный, взятие логарифма отнимет около 80 тактов, издержки цикла еще 20, для всего массива из N элементов это составит около 100*N тактов, при N=10000 вычисление логарифмов займет 1М тактов (около 0.5 мс при частоте 2.0ГГц), и, извините, это такие копейки для процов с современными тактовыми частотами.

Re: Длинная арифметика без длинной арифметики

Добавлено: 19 мар 2008, 15:54
airyashov
не очень хорошо понимаю как вы собираетесь привести все к одному основанию, это задача по сложности одинакова, если a[k]=E^P, то сравнивать придется P*b[k], а если предварительно расчитать массив a[k]
к ln[a[k]], то разницы нет в решении.

Re: Длинная арифметика без длинной арифметики

Добавлено: 19 мар 2008, 18:00
WarMaster
Большое спасибо.