2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3, 4
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 13:33 
Аватара пользователя
Ой, действительно не хватает. Значит, надо считать по двум взаимно простым модулям в районе $2^{57}$ (или по четырем в районе $2^{29}$).
Я проверил - вычисление в double методом Горнера выдает на моем примере $+0$.

 
 
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 14:26 
Xaositect в сообщении #1328033 писал(а):
Ох. Таких вещей без знания теории делать нельзя.

Но если очень хочется нет бортовой длинной арифметики, то можно. И о знании какой теории речь? Мне тоже не нравится использование плавающей арифметики в этой задаче, я в курсе, что точности 15 знаков не хватит при 10-й степени, но я увидел, что и целочисленной 64-битной арифметики при наивной реализации (без взаимно простых модулей) также не хватит, и написал такой хак, с целью проверить прохождение тестов, не усложняя расчет - они прошли. Тем более, этот момент не является хоть сколь-нибудь критичным в плане самого алгоритма. При наличии более серьезных тестов разумеется я бы рассчитал в целых, написав для этого свой велосипед или подключив какую-нибудь либу.

ЗЫ если на то пошло, там и функцию сортировки результата надо поменять, ибо она сортирует через приведение к даблам, а на близких рациональных числах при больших числителях/знаменателях это тоже может привести к ошибке - и я отлично это понимаю, и знаю, что таких вещей делать нельзя :-)

ЗЗЫ если бы я добавлял эту задачу на сайт, я бы разумеется добавил самые жесткие тесты, чтобы подобная халява не проходила - как я делал в подобных случаях, например в моих катах на Кодоворсах. Результат - народ просто не решает и все :-) А в случае данной задачи достаточно просто один в один переписать алгоритм на Питоне, где тоже есть авторесайзящиеся вектора и из коробки длинная арифметика - благо в списке языков для проверки решений он есть :-) И пары на Питоне тоже в ядре и не такие страшные по синтаксису, и скорость алгоритма позволяет его реализовать на любом медленном скрипте - прямо все аргументы за Питон, действительно зря я по инерции на плюсах решал.

 
 
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 15:08 
Аватара пользователя
_Ivana, извините, если что не так. Здесь все-таки тема для обучения начинающих, нельзя же просто так без объяснения такие хаки писать.

 
 
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 15:21 
Xaositect, и Вы тоже извините меня за несдержанность.

 i  GAA:
Замечание за уход от тематики программирования на обсуждение личных отношений. Оффтопик в этом сообщении удалён. Последующие сообщения с оффтопиком на эту тему удалены.

Кстати, пользуясь случаем (С), предлагаю Вам попробовать мои вышеупомянутые каты на Кодоворсах. Адрес Вы знаете. По крайней мере, пара-тройка из них народу весьма понравилась - бурные обсуждения и портирования на кучу других языков, а пару пока так никто и не решил :-)

ЗЫ а по сабжу - я бы и в кучу камней добавил жестких тестов, чтобы наивная рекурсия без мемоизации не проходила.

 
 
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 21:53 
Аватара пользователя
Xaositect в сообщении #1328046 писал(а):
Значит, надо считать по двум взаимно простым модулям

Прошу прощения, а где можно об этом почитать? (а то столкнулся с критичной потерей точности)

 
 
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 22:05 
Аватара пользователя
Используя китайскую теорему об остатках, можно целочисленные вычисления по модулю $p_1 p_2 \dots p_k$ проводить как вычисления по модулям $p_i$ отдельно. Остаются проблемы на входе и выходе, но часто делать так проще, чем использовать полноценную длинную арифметику.

 
 
 
 Re: Перевёртыш строки на JavaScript
Сообщение21.07.2018, 23:22 
Аватара пользователя
Xaositect в сообщении #1328134 писал(а):
часто делать так проще, чем использовать полноценную длинную арифметику

Мммм, за счёт откладывания на потом "переносов в старший разряд"?.. (хотя, боюсь это оффтоп уж совсем)

 
 
 
 Re: Перевёртыш строки на JavaScript
Сообщение23.07.2018, 11:15 
Монеты - сайт проверки прилег, но по моим ощущениям алгоритм и код должен быть правильный. На тесте из условия задачи работает нормально.
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
int n; double m[100];

double al (double r, double a, double b) { double x=r*(r+a+b); return acos( (x-a*b)/(x+a*b) ); }

double f (double r) {
    double z=2*M_PI;
    for (int i=0; i<n; i++) z-=al(r, m[i], m[(i+1)%n]);
    return z;
}
int main() {
    cin>>n; for (int i=0; i<n; i++) cin>>m[i];
    double l=0, r=n*m[0];
    while (r-l>1E-3) { double c=(l+r)/2; if (f(c)<=0) l=c; else r=c; }
    cout<<setprecision(2)<<l;
}
 


ЗЫ имхо эту задачку и Ktina могла бы решить - программизма мало, в основном геометрия из начальной школы.

 
 
 [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3, 4


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group