Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Чем занимаетесь?

Автор Лила, ноября 21, 2014, 21:47

0 Пользователи и 2 гостей просматривают эту тему.

mnashe

Интересно проверить Python'ов скрипт, подставив, скажем, 1,9 вместо 2. Будет так же быстро?
Или он понимает, когда перед ним двойки, и вычисляет двоичные операции мгновенно (так что секунда уходит лишь на перевод в строку — деление длинного числа на 10)?
В принципе, перевод длинного двоичного числа в строку — операция медленная, но в ней нет вложенных циклов.
А у меня вложенный цикл (удвоение десятичного числа — внешний, удвоение цифры — внутренний) — поэтому считает целых четыре секунды. А переводить в строку уже не нужно, я изначально в ней считаю.
Мне кажется, операция возведения в степень произвольных длинных вещественных чисел должна работать медленно. Ведь тут не воспользуешься командами процессора...
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

mnashe

Цитата: Bhudh от мая  5, 2015, 02:02
Тут фишка питона в том, что он с длинными числами работает как со строками.
То есть у него длина почти не ограничена. Складывай себе и складывай в столбик.
Строками десятичными (как у меня) или двоичными?
Если первое, то не должно быть быстрее, чем у меня на ассемблере.
Если второе, то может быть быстрее, если у него реализовано целочисленное возведение в степень целых чисел. И то, я не представляю себе, как его реализовать для произвольных чисел, чтобы оно считало так быстро. Конечно, в этом конкретном примере возвести 2 в степень 65536 — это тупо сдвинуть байт влево на 65536/8=8192 байт, заполнив все эти 8192 байт нулями (и установить длину строки 8193). Но неужели Python действительно делает такие адаптивные расчёты? :???
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Bhudh

Цитата: mnashe от мая  5, 2015, 02:07Интересно проверить Python'ов скрипт, подставив, скажем, 1,9 вместо 2.
Так float вычисляется в экспоненту. Это только intʼы разворачиваются во всю ширь.
Поэтому вполне закономерное
>>> 1.9**1.9**1.9**1.9**1.9
2.2587944025461746e+78

>>> 1.9**1.9**1.9**1.9**1.9**1.9
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    1.9**1.9**1.9**1.9**1.9**1.9
OverflowError: (34, 'Result too large')
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

mnashe

Цитата: Bhudh от мая  5, 2015, 02:17
Это только intʼы разворачиваются во всю ширь
Ага, понятно.
Теперь надо попробовать 1515555 (это примерно такого же порядка число, но без двоек).
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

mnashe

Тогда мне непонятно.
Я не представляю, как возводить в произвольную целочисленную степень без последовательных умножений.
А последовательные умножения — это всё те же вложенные циклы. В данном случае — внешний цикл повторяется 15555 раз, во внутреннем количество циклов растёт от одного до нескольких тысяч. В общем, мало отличается от того, что у меня. Разве что можно сразу по 4 байта считать, а не по одной цифре (что в 9 раз быстрее), но зато потом дополнительная операция.
Наверно, действительно эффективность выше за счёт операций с 32-битными словами... :donno:
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Bhudh

Вот, нашёл про floatʼы.
Цитата: Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. На обычной 32-битной вычислительной машине, использующей двойную точность (64 бита), мантисса составляет 1 бит знак + 52 бита, показатель — 1 бит знак + 10 бит. Таким образом получаем диапазон точности примерно от 4,94·10−324 до 1.79·10308 (от 2−52 × 2−1022 до ~1 × 21024).
Самое точное выводимое значение в JavaScript: 1.7976931348623157e+308
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

mnashe

Не понял, как это связано с обсуждаемым вопросом.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Bhudh

Это к тому, откуда лезет overflow :).
В принципе overflow может вылезти и с очень большими intʼами, но тут я не знаю: выжрав всю доступную память, Python упадёт, зависнет или выкинет эксепшн на последнем издыхании?‥
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

_Swetlana

Цитата: mnashe от мая  4, 2015, 22:49
Цитата: _Swetlana от мая  4, 2015, 22:38
А я чрез логарифм без программы посчитаю. Не так точно, но порядок можно оценить.
Спасибо, кэп! ;D
Исән бул, Мынаше! 
Вообще-то я предположила, что тебе и Буду на это мозгов не хватило  ;D Обшиблась, ну и ладно.


 
 
🐇

Ильич

Цитата: Bhudh от мая  5, 2015, 01:55Попробовал [tex]^2\(2^{2^{2^{2^2}}}\)[/tex] вычислить, так он выжрал 600 метров свопа и выжрал бы ещё, если б я его не вырубил. Так он ещё проц несколько минут отпускать не хотел...
Вот так русский мужик может любую импортную технику сломать. А то Питон, Питон - а мы его факториалом!

Ильич

Цитата: mnashe от мая  5, 2015, 02:16Конечно, в этом конкретном примере возвести 2 в степень 65536 — это тупо сдвинуть байт влево на 65536/8=8192 байт, заполнив все эти 8192 байт нулями (и установить длину строки 8193). Но неужели Python действительно делает такие адаптивные расчёты? :???
К слову, умножение (деление) на 2 целого реализовывалось сдвигом на бит в самых первых трансляторах. Для чисел с плавающей точкой там просто изменяли на 1 порядок.

mnashe

Цитата: Ильич от мая  5, 2015, 10:26
К слову, умножение (деление) на 2 целого реализовывалось сдвигом на бит в самых первых трансляторах. Для чисел с плавающей точкой там просто изменяли на 1 порядок.
Ага.
Даже мой самодельный примитивный транслятор оптимизирует умножение / деление на 2, 4, 8, заменяя их на соответствующее количество сдвигов.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

mnashe

Цитата: _Swetlana от мая  5, 2015, 09:33
комп 3 часа считал!
Секунды. На старых компьютерах.
Подумаешь, 250!. Это ведь даже меньше, чем 250250, а в последнем всего каких-то 600 цифр, в пять раз меньше, чем мы тут вчера считали.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

_Swetlana

Второкурсникам год (!) в разных формах задаю один и тот же вопрос.
Один вариант
Заказчик вам дал техзаданье. Дан орграф. Написать программу, которая будет печатать все ор. циклы этого графа.
Что вы должны выяснить у заказчика? Заказчик запрашивает информацию, которую сможет переварить? Оцените, сколько там будет циклов? Есть смысл такую программу писать? На самом деле заказчику нужно разомкнуть все контуры в этом графе. Как решить такую задачу?
И обязательно кто-нибудь да скажет: циклов там будет n в квадрате. За денежки - будем писать  :-[   
🐇

I. G.

Ну Вы зверь! У нас второкурсникам на математике задают первый вопрос "Как поделить 3 на 2 с остатком?".
...И мимимишечных круглышек,
Что безусловно хороши,
Но очень вредны для души.

_Swetlana

Это их кусок хлеба. Программистов - как грязи.
🐇

Hellerick

Лично я нифига не понял, что там написано.

Python

Цитата: Python от мая  4, 2015, 23:27
s=str(2**2**2**2**2)
print(s[0:len(s)%3], end=' ')
for i in range(len(s)%3, len(s), 3):
   print(s[i:i+3], end=' ')

Или даже так:
print("{:,}".format(2**2**2**2**2).replace(',', ' '))
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

_Swetlana

Цитата: Hellerick от мая  5, 2015, 14:55
Лично я нифига не понял, что там написано.
Значит это не ваш кусок хлеба.
Речь о том, что к концу 2-го курса дети худо-бедно могут организовать процесс каких-нибудь вычислений, но не понимают, сколько времени они займут, и зачем вообще нужны.
🐇

Ильич

Цитата: _Swetlana от мая  5, 2015, 15:20Значит это не ваш кусок хлеба.
Речь о том, что к концу 2-го курса дети худо-бедно могут организовать процесс каких-нибудь вычислений, но не понимают, сколько времени они займут, и зачем вообще нужны.
Дети ладно. Я встречал много взрослых людей, которые считали себя профессиональными программистами, но они не могли объяснить зачем вообще нужно то, что они ваяют в порыве вдохновения.

Toman

Цитата: _Swetlana от мая  5, 2015, 11:01
Заказчик вам дал техзаданье. Дан орграф. Написать программу, которая будет печатать все ор. циклы этого графа.
Чё-то сразу подумалось о трамвайной сети, рассчитанной строго на односторонние вагоны ;)
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

_Swetlana

Цитата: Toman от мая  5, 2015, 15:41
Цитата: _Swetlana от мая  5, 2015, 11:01
Заказчик вам дал техзаданье. Дан орграф. Написать программу, которая будет печатать все ор. циклы этого графа.
Чё-то сразу подумалось о трамвайной сети, рассчитанной строго на односторонние вагоны ;)
Задача была такая. С помощью орграфа в старой версии оракла рассчитывалась себестоимость продукции. Если брак пускали в металлолом, он превращался в исходное сырьё и замыкался орцикл. А оракл не был к этому готов. Размерность графа была 62 тыс. дуг.
🐇

Toman

Цитата: _Swetlana от мая  5, 2015, 16:17
Если брак пускали в металлолом, он превращался в исходное сырьё и замыкался орцикл. А оракл не был к этому готов.
И что, надо было найти и выпилить все эти орциклы, чтобы оракл не пугался, а потом досчитать вручную (т.е. уже средствами своей программы)?
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

_Swetlana

Да. Новый оракл уже сам находит.
То есть нет. Вначале разомкнуть контуры, а потом отправить на счёт ораклу.
🐇

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр