- 1
2/3
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−100
2/3
ПИТОНОПРОБЛЕМЫ ;)
P.S. Да, я читал доки. Не меня в них тыкать носом.
laMer007 07.10.2013 12:48 # +1
>Не меня в них тыкать носом.
А кого? Есть предложения?
roman-kashitsyn 07.10.2013 12:50 # 0
вам идёт ваш ник
laMer007 07.10.2013 12:55 # 0
Ещё вопрос кому он больше идет.
3.14159265 07.10.2013 13:02 # +3
А чё. Переносимо.
laMer007 07.10.2013 13:09 # 0
3.14159265 12.10.2013 23:36 # 0
Всех предупредили заранее. Но и не минусовал, т.к. 2/3 намёк (не знаю борманд осознанно так написал) что третья версия делит вторую.
roman-kashitsyn 07.10.2013 13:04 # +1
laMer007 07.10.2013 13:11 # 0
spivti 07.10.2013 13:21 # −3
2/float(3) Это вроде-бы к 2 версии относиться.
anonimb84a2f6fd141 07.10.2013 19:02 # +1
Dummy00001 07.10.2013 13:12 # +6
я правильно понимаю что проблема в том что на питоне 2 это 0, на 3ке это 0.6(6)?
медленно начинаю понимать почему перл с самого начала в лоб все подобное во флоаты автоматом конвертит.
roman-kashitsyn 07.10.2013 13:23 # +4
Это тоже не фонтан. Мне больше всего нравится, как это сделано в Haskell. Числовые литералы там полиморфны, и выражение 2/3 будет иметь тип из класса Fractional (Float или Double в зависимости от контекста). Если же тип точно известен и это Int или Integer, оператор / для них не определён, нужно явно конвертировать во float. Для деления с остатком есть div, mod и divMod.
Подход OCaml с отдельными набороми операторов меня слегка бесит.
Dummy00001 07.10.2013 13:37 # +1
пахнет лиспом.
честно скажу что как оно в перле точно я не ковырял. но мое впечатление что деление всегда конвертит во флоат. все остальные операции - только если происходит переполнение. официально даже и разницу узнать нельзя, внутренее представление числа int или float. все таки как бы не математический язык: вычисление выражений делается тупой интерпретацией и уже производительность наталкивает на мысли.
bormand 07.10.2013 13:42 # +1
Даже комплексные числа? :(
wvxvw 07.10.2013 14:27 # 0
Проблемы с семантикой деления решаются примерно так:
Что делает это очень многословным, но с другой стороны, как правило можно ограничиться только указанием типов аргументов, компилятор сам выберет нужную реализацию.
Abbath 07.10.2013 18:14 # 0
Dummy00001 07.10.2013 18:46 # 0
попробуй:
на 5.8/5.10: первая `IV` - это int value, вторая `NV` - это "number" value (aka float).
bormand 07.10.2013 13:41 # +4
Причем не только div и mod, которые округляют вниз (что удобно для всяких тайлов), но и rem с quot'ом, которые округляют к нулю (аля интелоделение).
P.S. В питоне тоже сделали div, но назвали его, имхо, стремно: "//". Имхо, div был бы наглядней, чем эти джве палки.
Yuuri 11.10.2013 10:00 # 0
TarasB 07.10.2013 20:29 # +4
LispGovno 07.10.2013 22:05 # +3
TarasB 09.12.2013 11:08 # +2
bormand 09.12.2013 14:08 # 0
TarasB 09.12.2013 14:24 # +1
Типы-то разные, делить нельзя.
А неявные преобразования запрещены нафиг.
bormand 09.12.2013 15:06 # 0
И это хорошо.
TarasB 09.12.2013 15:26 # 0
LispGovno 09.12.2013 20:50 # 0
PragramistOtBoga 07.10.2013 18:35 # −16
anonimb84a2f6fd141 07.10.2013 19:01 # 0
Ээ покажи мне язык, который себя по другому ведет. В новых питонах от этой сишной хуйни с привязкой к типам решили избавиться и сделать логичный, калькуляторный div.
LispGovno 07.10.2013 19:54 # −1
Stertor 07.10.2013 21:04 # −1
>>в задней части тела
В спине?
crastinus 07.10.2013 21:19 # +4
В затылке.
Stertor 07.10.2013 21:21 # −1
:O
crastinus 07.10.2013 21:31 # +2
bormand 08.10.2013 06:20 # +1
Яваскрипт, похапешечка?
> сишной хуйни
Да на сишке это еще не так страшно было... в сишкоподобных языках тип же заранее известен, и деление или всегда флоатовое, или всегда целочисленное. А тут оно зависит от данных: ввел юзер 2.0 - флоаты, ввел 42 - инты. Что вызывает батхерты и заставляет делать лишние касты во флоат.
> В новых питонах
Ну вот в третьем да, все нормально.
anonimb84a2f6fd141 08.10.2013 06:39 # −2
>Яваскрипт, похапешечка?
/0. Слабая типизация не нужна.
>А тут оно зависит от данных: ввел юзер 2.0 - флоаты, ввел 42 - инты. Что вызывает батхерты и заставляет делать лишние касты во флоат.
Батхерты такого рода оно вызывает у мудачья, использующего input() вместо raw_input(). Алсо, from __future__ import четотам.
bormand 08.10.2013 06:52 # +2
Ну числа же не только из консолечки читают...
Может быть мы пишем библиотечную функцию, которая принимает некое число, и потом что-то с ним делает. И юзер вместо положенного флоата передает туда int.
LispGovno 08.10.2013 09:03 # 0
anonimb84a2f6fd141 08.10.2013 16:56 # −1
input() = eval(raw_input). Продолжать? Из тройки его в таком виде убрали.
anonimb84a2f6fd141 08.10.2013 16:57 # −1
anonimb84a2f6fd141 08.10.2013 16:58 # −1
roman-kashitsyn 08.10.2013 17:05 # +3
> __future__, конечно же, ниасилили
Это более-менее подходит если ты пишешь 2.x код, ориентируясь на возможный переход на 3-ку. Для портирования существующего легаси это бесполезно.
Soul_re@ver 08.10.2013 17:23 # +4
added __past__ for legacy code support
anonimb84a2f6fd141 08.10.2013 19:03 # −1
Он от этого просто так не поломается, т.к. код из двойки просто так на тройке не запустится хотя бы из-за print, а те, кто портируют - такие нюансы знают (google: различие между двойкой и тройкой)
То, что вам кажется проблемами, на самом деле - хуйня собачья и верхушка айсберга, который вы по незнанию не видите. Сразу видно, что ничего не портировали. Например, пропал "".(en|de)code('hex'), его запиздочили в codecs. bytes внезапно! сделали массивом интов, а не символов. Пропал оператор форматирование "%s" % "a". "".format() для байтов не работает.
roman-kashitsyn 08.10.2013 19:14 # 0
Я прочитал последний Dive into Python, там в деталях описано, как происходит портирование. Это вызвало у меня такой батхёрт, что я просто для личных целей продолжаю пользоваться 2.x, игнорируя 3.x.
Ну и вообще странно, что вещи из топика нету в 2to3.
anonimb84a2f6fd141 08.10.2013 19:37 # −1
Что-то такое есть :) Но твой батхерт имеет мало общего с реальностью, т.е. у людей, реально работающими с этим, батхерт вызывает другое.
Ну и насчет 2to3 - фитон - не жавка, где в эклипсе можно методы мышкой перетаскивать. Тут в статике вообще нихуя не работает.
wvxvw 09.10.2013 00:31 # 0
anonimb84a2f6fd141 09.10.2013 00:35 # −1
именованые кортежи, аннотации и другой подобный сахар?
Lure Of Chaos 11.10.2013 22:11 # 0
bormand 11.10.2013 23:10 # 0
Lure Of Chaos 11.10.2013 23:15 # 0
bormand 11.10.2013 23:41 # 0
Lure Of Chaos 11.10.2013 23:48 # 0
конструктивно: все-таки, где раньше было реализовано?
guest 11.10.2013 23:50 # −3
Lure Of Chaos 12.10.2013 00:01 # 0
мило.
от недостатка шлюх желать трахать все, хоть эл.розетку.
bormand 11.10.2013 23:55 # 0
2.0: http://ideone.com/h4CzMm
3.0: http://ideone.com/DyXhyk
В тройке решили сделать более интуитивное поведение. А для целых чисел сделали специальный оператор // (хотя, имхо, лучше бы они назвали его div, а не этой фигней с двумя палками).
guest 11.10.2013 23:50 # −3
anonimb84a2f6fd141 12.10.2013 01:43 # 0
>фитон
/0
Целочисленное деление - изобретение байтоёбов.
Lure Of Chaos 12.10.2013 01:50 # 0
сейчас уже важно распараллелирование на ядра, нежели отставание байткода от нативного.
как никогда актуально знание алгоритмов, их сложность и тактикак assParallel (простите, не удержался)
оффтоп: мне сегодня доказывали, что расспареливование на низком уровне дискредитирует всю 20-летнюю теорию сложности алгоритмов, ибо это вносит хаос в однопотоковый подсчет сложности
WGH 12.10.2013 03:14 # 0
Впрочем, тем временем в проекте PyPy ставят эксперименты с транзакционнной памятью, которая новыми процессорами будет поддерживаться аппаратно. Поживем - увидим.
anonimb84a2f6fd141 12.10.2013 21:51 # 0
roman-kashitsyn 12.10.2013 09:34 # +1
С учётом того, что сложность алгоритмов обычно оперирует ассимптотикой количества требуемых операций (или ячеек памяти), то этот тезис выглядит очень спорно. От того, что операции выполняются на разных ядрах, их кол-во ассимптотически не изменяется, так ведь?
bormand 12.10.2013 10:19 # 0
roman-kashitsyn 12.10.2013 11:20 # +2
По счастливому совпадению из меньшего кол-во операций в случае однопоточной программы часто следует меньшее время выполнения (и то не всегда верно, т.к. сильно влияют факторы вроде локальности данных). В многопоточной программе это работает ещё реже, но, тем не менее, это слабо влияет на классический анализ сложности.
kegdan 12.10.2013 20:06 # 0
anonimb84a2f6fd141 12.10.2013 21:50 # 0
3.14159265 12.10.2013 23:39 # 0
Медленная шина для передачи туда-сюда, и разное адресное пространство CPU и GPU замедлят такой код раз в сто.
Это чисто царский подход - юноши-максималиста, оценивающего сырую мощь, а не схему в целом.
kegdan 13.10.2013 01:33 # 0
Поэтому имеет смысл кинуть на GPU over 100000 действий. Опять же не панацея.
anonimb84a2f6fd141 13.10.2013 04:37 # 0
3.14159265 12.10.2013 23:49 # 0
Будь у вас хоть миллионы ядер - не разложите вы, на существующей алгоритмической базе, огромное простое число на множители и не поломаете открытую криптографию.
И то что оставалось от гипотезы Гольдбаха не докажете экспериментально - тупым перебором до числа Виноградова. Хотя казалось бы сейчас компьютеры жутко скоростные, не то что 1937 год.
А всё потому что для полного перебора энергии понадобилось бы больше чем есть в Солнечной системе.
Кстати всех поздравляю - наконец-то, совсем недавно тернарную доказал другой выходец со славянской земли; теперь уже окончательно и бесповоротно.
Lure Of Chaos 13.10.2013 00:13 # +2
roman-kashitsyn 14.10.2013 14:13 # +2
"В 2013 году тернарная гипотеза Гольдбаха была окончательно доказана Харальдом Гельфготтом" wiki
anonimb84a2f6fd141 13.10.2013 04:38 # 0
>Будь у вас хоть миллионы ядер - не разложите вы, на существующей алгоритмической базе, огромное простое число на множители и не поломаете открытую криптографию.
Класс сложности известен + простая арифметика? Или это твой коллега по шараге тоже изобрел?
3.14159265 14.10.2013 14:08 # +2
Ядра - количественное улучшение, максимум на порядок.
Алгоритмы - качественное, они позволят решать задачи, на брутфорс для которых ранее потребовалось бы невообразимое количество энергии (то есть нерешаемые в принципе).
Экстенсивное vs Интенсивное. Так понятно?
anonimb84a2f6fd141 09.12.2013 10:19 # +2
3.14159265 13.12.2013 21:07 # 0
guest 14.12.2013 00:00 # 0
А вообще, мощности разве еще не растут экспоненциально?
wvxvw 12.10.2013 13:00 # 0
Но теоретической базы посчитать пока что не очень. Вся имеющаяся теория более-менее сводится к CSP (Communicating Sequential Processes), но там еще далеко до моделей производительности.
Но как в последнее время все образованное сообщество метнулось производительность считать не в тиках, а в копировании данных (communication avoiding), то это создает совсем другую картину мира, в которой большая О вместе с фитой становятся менее актуальными.
roman-kashitsyn 12.10.2013 14:25 # 0
Это к чему? Сложность "предсказывает" кол-во операций по отношению к размерности задачи, скорость - пройденное расстояние по отношению к прошедшему времени.
wvxvw 12.10.2013 15:09 # 0
defecate-plusplus 12.10.2013 15:51 # 0
в книжках никто не знает на чем ты поедешь, а понять относительные величины легко можно и сравнив сложности, не прибегая к скорости - от москвы до питера 700км, а до продуктового магазина - 100м
софистика
wvxvw 12.10.2013 16:27 # 0
Т.е. если сравнивать со скоростью, имеем что из нескольких точек А, Б, В... вышло сколько-то поездов и все вместе проехали 386 километров. Такая деконструкция бессмысленна, и мерять общее пройденное расстояние не зная как минимум сколько поездов всего было - просто бессмысленное занятие.
anonimb84a2f6fd141 12.10.2013 21:49 # 0
guest 13.12.2013 00:46 # 0
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/3
0
>>> 2/3.
0.6666666666666666
>>> from __future__ import division
>>> 2/3
0.6666666666666666
>>> 2//3
0
bormand 13.12.2013 06:06 # 0
guest 13.12.2013 08:00 # 0
bormand 13.12.2013 10:07 # 0
P.S. Хотя с // они опять накосячили - если один из аргументов флоат, то он какого-то хуя возвращает float, хотя подразумевается целый результат. 2.0 // 3 = 0.0, хотя должно возвращать просто 0, ну или на крайний случай исключение. при {"x":3.0} и {"x":3} будет работать по-разному. В третьем питоне же все сделали правильно - один оператор всегда возвращает флоаты, а второй всегда возвращает целые.
guest 13.12.2013 19:37 # 0
bormand 13.12.2013 20:01 # 0
У меня горит, потому что я на это нарвался, когда выкладывал этот гк :) Впрочем виноват тут скорее я сам, т.к. понадеялся на интуитивное поведение (/ всегда возвращает флоат, аля паскаль), и доку по делению прочитал только после того, как наткнулся на эту говнофичу деления.
guest 14.12.2013 00:01 # 0
Почему это поведение для тебя интуитивное? В сишкообразных языках это всегда было как в си.
bormand 14.12.2013 00:35 # 0
Ну как минимум жабаскрипт себя так ведет. И легче предсказать результат.
> В сишкообразных языках это всегда было как в си.
Еще раз. Не надо сюда приплетать сишкообразные языки. У них, практически у всех, типы разруливаются во время компиляции (в жс нет - но в нем / всегда флоат). И там я всегда знаю заранее, когда / это целочисленное деление, а когда нет.
bormand 14.12.2013 00:58 # 0
guest 14.12.2013 01:56 # 0