- 1
- 2
- 3
- 4
import math
print math.pow(2,64) //1.84467440737e+19
print pow(2,64) //18446744073709551616
print 2**64 //18446744073709551616
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−422
import math
print math.pow(2,64) //1.84467440737e+19
print pow(2,64) //18446744073709551616
print 2**64 //18446744073709551616
http://ideone.com/kmGrBa
http://ideone.com/otSgCP
Говно в обоих версиях калькулятора.
gost 16.07.2014 20:42 # +3
3.14159265 16.07.2014 21:15 # 0
kegdan 16.07.2014 21:28 # 0
3.14159265 16.07.2014 21:34 # 0
http://ideone.com/dLuwMI Калькулятор опасен
chtulhu 17.07.2014 07:24 # +1
3.14159265 17.07.2014 12:48 # 0
Ха-ха-ха. Оценил.
chtulhu 17.07.2014 15:59 # +1
slowfix
anonimb84a2f6fd141 24.07.2014 18:37 # −1
JuiceRU 24.07.2014 12:44 # −1
степень здесь не причем, и говно не калькуляторское
http://ideone.com/sodov8
print 3.2*3 # 9.6
print 3.2*3 == 9.6 # False
1024-- 24.07.2014 13:55 # 0
Вот мы и поймали тебя, Петя Содов!
anonimb84a2f6fd141 24.07.2014 14:02 # −2
anonimb84a2f6fd141 24.07.2014 14:08 # −4
anonimb84a2f6fd141 24.07.2014 14:09 # −4
anonimb84a2f6fd141 24.07.2014 18:37 # −3
3.14159265 16.07.2014 21:40 # −1
print pow(2,64)==math.pow(2, 64) TRUE
bormand 16.07.2014 21:43 # +3
1000000000000000001.0 == 1000000000000000002.0 TRUE
anonimb84a2f6fd141 24.07.2014 18:39 # −3
anonimb84a2f6fd141 24.07.2014 18:35 # −4
3.14159265 16.07.2014 21:31 # −1
Если никому сходе не режет глаз плавающая запятая, ну что поделать - у вас еще всё впереди.
bormand 16.07.2014 21:41 # −1
3.14159265 16.07.2014 21:48 # −1
Зачем?
Подчёркиваю.
math.fabs() converts its argument to float if it can
abs(x)
Return the absolute value of a number.
bormand 16.07.2014 22:06 # −1
Затем, что math - это... питоноблядская эмуляция сишкоблядской стандартной либы:
It provides access to the mathematical functions defined by the C standard.
...
Except when explicitly noted otherwise, all return values are floats.
3.14159265 17.07.2014 00:07 # +1
abs - fabs
divmod - fmod
Там логично всё. Но вот от pow у меня НЕКОНСИСТЕНТНОСТЬ.
>It provides access to the mathematical functions defined by the C standard.
Немного куцо выглядит. Много функций не хватает. Где например fma? Где round?
bormand 17.07.2014 05:17 # −1
C89, вестимо.
3.14159265 17.07.2014 10:34 # −1
Понятно. Но уже прошло джва десятка лет, сменилось джве версии сишки и джве версии питона.
anonimb84a2f6fd141 24.07.2014 18:41 # −2
3.14159265 17.07.2014 11:46 # 0
Меня не сколько импорт, затирающий имена без предупреждений раздражает, сколько неявное приведение к float.
ЕМНИП в C89 сигнатура функции выглядит так:
>double pow (double a, double b)
Что обычный pow и делает - если один из аргументов флоат, то результат будет флоат.
pow(3,64) по сигнатуре не подходит к сишной функции - почему он должен вернуть double?
А эти люди даже написали в Python Zen:
Explicit is better than implicit.
Выглядит как издевательство.
bormand 17.07.2014 12:07 # −1
> pow(3,64) по сигнатуре не подходит к сишной функции
Так в сишке же нет перегрузок! Поэтому все отлично подходит: инты кастанутся в даблы да вызовется. Флоаты тоже кастанутся в даблы.
3.14159265 17.07.2014 12:38 # +2
Неявно! Они ж могли просто оставить точно такой же pow (совместимость с math.h), аргументируя борьбой с неявным.
И сделать fpow, если сильно хотелось.
А масла в огонь подливает отличная справка.
Ни слова о float.
3.14159265 17.07.2014 12:44 # +2
Но в реале то x**y, не эквивалентен math.pow(x,y)
И в сишке Wconversion ругнётся, если не при конверте в double, так при сохранении результата в int.
bormand 17.07.2014 12:48 # −1
3.14159265 17.07.2014 01:40 # −1
Вот простая строка, меняющая всё:
from math import *
Pythoner 17.07.2014 02:01 # −1
__builtin__.pow
3.14159265 17.07.2014 02:41 # −1
Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named __builtin__
Во втором работало, да.
kegdan 17.07.2014 05:51 # −2
3.14159265 17.07.2014 10:34 # −1
Потому что builtins.pow короче чем __builtin__.pow
bormand 17.07.2014 05:18 # −1
Это как using namespace в крестах. С одной стороны писать меньше, а с другой - раскладывает грабли на дороге.
bormand 17.07.2014 05:59 # −1
А полный импорт неймспейса - зло, хотя и заманчиво. Мало ли чего там подсунут кроме этого math.pow()...
kegdan 17.07.2014 07:31 # −1
математические хуи такие математические...
Ну если нам нужен один хуй - то да. А если 1001 то лучше показать какие хуи нинужоны
bormand 17.07.2014 07:39 # 0
То код - ёбаное говнище. Зачем тебе столько top-level классов/функций/переменных в одном модуле?
> то лучше показать какие хуи нинужоны
Если компилятор умеет материться на конфликты, как тот же хаскель - да, соглашусь. А если, как питон, молча затирает первые и оставляет самый последний - нет, не лучше.
kegdan 17.07.2014 07:43 # −1
Ну ладно, сколько функций ты готов экспортировать руками?
bormand 17.07.2014 07:46 # +1
Импортировать же.
Если честно, то после крестов-бустов меня совсем не напрягает писать math.pow() после import math. И from math import pow, fabs тоже не напрягает. Так что сколько надо будет по задаче - столько и импортну. А from math import * я оставлю ленивым экстремалам, жрите свой кактус сами.
P.S.
kegdan 17.07.2014 08:24 # 0
Да, карликовый лев попутал меня
На вкус и цвет...
bormand 17.07.2014 08:29 # −1
Ты просто никогда не налетал на эти косяки...
И 146%, что Пи после вчерашнего батхёрта тоже больше никогда не будет юзать from че-то import * :)
kegdan 17.07.2014 08:32 # 0
roman-kashitsyn 17.07.2014 10:43 # +1
Я вообще против введения такого синтаксиса в языки. Он может позволять меньше думать при написании, но сильно мешает читать (и, соответственно, ревьюить) код.
В Go молодцы ребята, сделали обязательноую явную квалификацию при вызове всех функций из других модулей. Респект.
Хачкель является ярким примером: открываешь типичные исходники, а там 100500 неквалифицированных импортов, и хер знает, где смотреть сигнатуры и доки используемых функций. Ненавижу тех, кто так делает. Благо, есть механизмы, чтобы сделать читабельно.
3.14159265 17.07.2014 10:48 # −1
В жаве import static * тоже недолюбливаю. Дело даже не в том что оно в таких ситуация выдаёт ошибку со словом ambigous.
Просто без IDE совсем непонятно из какого класса/пакета пришёл метод.
Конечно я его частенько использую, много либ заточены именно на него.
>typedef boost::asio::ssl::stream<boost::asio::ip ::tcp::socket> ssl_socket;
Но вот в жабе я пару лет назад придумал для себя улучшенный импорт с алиасом. Причем с ограничением неймспейса по методу/классу:
Предпочитаю это import static *
Может кто-то додумался до этого раньше, но я на просторах интернета и в книжках не встречал такого.
roman-kashitsyn 17.07.2014 11:01 # 0
Про то и речь. Фанатики могут сколько угодно кричать "возьмите ИДЕ нищеброды", только вот они будут пищать как девчонки, когда придёт пора ревьюить код в типичном ревью-туле в браузере.
Разработчики жабы не учли естественной потребности в алиасах, которые были в крестах с незапамятных времён, в итоге имеем унылое нечитабельное говно со звёздочками либо сотни однострочных импортов. Про отсутствие тайпдефов я вообще молчу.
Олсо, не совсем понял хак с алиасом. Можно ещё пример?
3.14159265 17.07.2014 11:05 # 0
http://ideone.com/urrN0b
Если писать короткие методы - всё на виду. Не надо прыгать вверх класса. Обратите внимание: мы не засираем неймспейс класса, импорт ограничен только телом метода.
roman-kashitsyn 17.07.2014 11:10 # 0
3.14159265 17.07.2014 11:13 # −1
В 5-ой жабе сделали, только никому не сказали :)
roman-kashitsyn 17.07.2014 11:08 # −1
Можно завести "статический" класс /com/my/module.java (именно с маленкой буквы), и запихать в него все родственные интерфейсы, енумы и классы.
Это позволяет имитировать явную квалификацию имён модулей без указания полного имени пакета.
3.14159265 17.07.2014 11:10 # −1
Оно даже на DSL становится похоже.
anonimb84a2f6fd141 24.07.2014 18:40 # −2
anonimb84a2f6fd141 24.07.2014 18:39 # −2
anonimb84a2f6fd141 24.07.2014 14:13 # −2
kegdan 24.07.2014 15:02 # +1
anonimb84a2f6fd141 24.07.2014 18:28 # −2