1. Python / Говнокод #16358

    −422

    1. 1
    2. 2
    3. 3
    4. 4
    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

    Говно в обоих версиях калькулятора.

    Запостил: 3.14159265, 16 Июля 2014

    Комментарии (58) RSS

    • Где здесь говно, 3.141592653589793?!
      Ответить
      • В калькуляторе.
        Ответить
        • Ке?
          Ответить
          • pow(3, 64)!=math.pow(3, 64)
            Калькулятор опасен
            http://ideone.com/dLuwMI
            Ответить
            • >>> (pow(3, 64) - math.pow(3, 64)) < math.e
              True
              Ответить
              • < math.e
                Ха-ха-ха. Оценил.
                Ответить
              • >>> abs(pow(3, 64) - math.pow(3, 64)) < math.e


                slowfix
                Ответить
                • ****     ****    ******    ****      ****     ***       ****            ****  **          ******     
                   **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   
                   **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  
                   **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  
                   **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  
                   *****        **        **  **    *   **  **        **   **        **   **        **   **        **  
                   **  **       **        **  **     *  **  ************   **      **     **        **   **        **  
                   **    **     **        **  **      * **  **        **   **   **        **        **   **        ** 
                   **     **    **        **  **       ***  **        **   **     **      **       **    **        **  
                   **      **    **      **   **        **  **        **   **       **    **     **       **      **   
                  ****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     
                  

                  Ответить
            • И что?
              степень здесь не причем, и говно не калькуляторское
              http://ideone.com/sodov8

              print 3.2*3 # 9.6
              print 3.2*3 == 9.6 # False
              Ответить
              • > http://ideone.com/sodov8
                Вот мы и поймали тебя, Петя Содов!
                Ответить
                • Vanished
                  Ответить
                  • _______________________________________________________________________________________________________
                    |****     ****    ******    ****      ****     ***       ****            ****  **          ******     |
                    | **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   |
                    | **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  |
                    | **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  |
                    | **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  |
                    | *****        **        **  **    *   **  **        **   **        **   **        **   **        **  |
                    | **  **       **        **  **     *  **  ************   **      **     **        **   **        **  |
                    | **    **     **        **  **      * **  **        **   **   **        **        **   **        **  |
                    | **     **    **        **  **       ***  **        **   **     **      **       **    **        **  |
                    | **      **    **      **   **        **  **        **   **       **    **     **       **      **   |
                    |****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     |
                    -------------------------------------------------------------------------------------------------------
                    Ответить
                    • _______________________________________________________________________________________________________
                      |****     ****    ******    ****      ****     ***       ****            ****  **          ******     |
                      | **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   |
                      | **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  |
                      | **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  |
                      | **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  |
                      | *****        **        **  **    *   **  **        **   **        **   **        **   **        **  |
                      | **  **       **        **  **     *  **  ************   **      **     **        **   **        **  |
                      | **    **     **        **  **      * **  **        **   **   **        **        **   **        **  |
                      | **     **    **        **  **       ***  **        **   **     **      **       **    **        **  |
                      | **      **    **      **   **        **  **        **   **       **    **     **       **      **   |
                      |****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     |
                      -------------------------------------------------------------------------------------------------------
                      Ответить
                • ****     ****    ******    ****      ****     ***       ****            ****  **          ******     
                   **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   
                   **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  
                   **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  
                   **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  
                   *****        **        **  **    *   **  **        **   **        **   **        **   **        **  
                   **  **       **        **  **     *  **  ************   **      **     **        **   **        **  
                   **    **     **        **  **      * **  **        **   **   **        **        **   **        ** 
                   **     **    **        **  **       ***  **        **   **     **      **       **    **        **  
                   **      **    **      **   **        **  **        **   **       **    **     **       **      **   
                  ****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     
                  

                  Ответить
          • print pow(2,84)==math.pow(2, 84) TRUE
            print pow(2,64)==math.pow(2, 64) TRUE
            Ответить
            • И? Ну флоату точности не хватает, что в этом такого? Типичная проблема с плавучим питухом, чем тут виноват питон?

              1000000000000000001.0 == 1000000000000000002.0 TRUE
              Ответить
            • ****     ****    ******    ****      ****     ***       ****            ****  **          ******     
               **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   
               **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  
               **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  
               **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  
               *****        **        **  **    *   **  **        **   **        **   **        **   **        **  
               **  **       **        **  **     *  **  ************   **      **     **        **   **        **  
               **    **     **        **  **      * **  **        **   **   **        **        **   **        ** 
               **     **    **        **  **       ***  **        **   **     **      **       **    **        **  
               **      **    **      **   **        **  **        **   **       **    **     **       **      **   
              ****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     
              

              Ответить
        • ****     ****    ******    ****      ****     ***       ****            ****  **          ******     
           **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   
           **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  
           **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  
           **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  
           *****        **        **  **    *   **  **        **   **        **   **        **   **        **  
           **  **       **        **  **     *  **  ************   **      **     **        **   **        **  
           **    **     **        **  **      * **  **        **   **   **        **        **   **        ** 
           **     **    **        **  **       ***  **        **   **     **      **       **    **        **  
           **      **    **      **   **        **  **        **   **       **    **     **       **      **   
          ****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     
          

          Ответить
    • Хе-хе-хе. Правильно, минусуйте.
      Если никому сходе не режет глаз плавающая запятая, ну что поделать - у вас еще всё впереди.
      Ответить
      • Unlike the built-in ** operator, math.pow() converts both its arguments to type float. Use ** or the built-in pow() function for computing exact integer powers.
        Ответить
        • >math.pow() converts both its arguments to type float.
          Зачем?
          Подчёркиваю.
          math.fabs() converts its argument to float if it can

          abs(x)
          Return the absolute value of a number.
          Ответить
          • > Зачем?
            Затем, что math - это... питоноблядская эмуляция сишкоблядской стандартной либы:
            It provides access to the mathematical functions defined by the C standard.
            ...
            Except when explicitly noted otherwise, all return values are floats.
            Ответить
            • sum - fsum
              abs - fabs
              divmod - fmod
              Там логично всё. Но вот от pow у меня НЕКОНСИСТЕНТНОСТЬ.

              >It provides access to the mathematical functions defined by the C standard.
              Немного куцо выглядит. Много функций не хватает. Где например fma? Где round?
              Ответить
              • > Много функций не хватает.
                C89, вестимо.
                Ответить
                • >C89, вестимо.
                  Понятно. Но уже прошло джва десятка лет, сменилось джве версии сишки и джве версии питона.
                  Ответить
                  • ****     ****    ******    ****      ****     ***       ****            ****  **          ******     
                     **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   
                     **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  
                     **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  
                     **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  
                     *****        **        **  **    *   **  **        **   **        **   **        **   **        **  
                     **  **       **        **  **     *  **  ************   **      **     **        **   **        **  
                     **    **     **        **  **      * **  **        **   **   **        **        **   **        ** 
                     **     **    **        **  **       ***  **        **   **     **      **       **    **        **  
                     **      **    **      **   **        **  **        **   **       **    **     **       **      **   
                    ****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     
                    

                    Ответить
                • >C89, вестимо.
                  Меня не сколько импорт, затирающий имена без предупреждений раздражает, сколько неявное приведение к float.
                  ЕМНИП в C89 сигнатура функции выглядит так:
                  >double pow (double a, double b)
                  Что обычный pow и делает - если один из аргументов флоат, то результат будет флоат.
                  pow(3,64) по сигнатуре не подходит к сишной функции - почему он должен вернуть double?

                  А эти люди даже написали в Python Zen:
                  Explicit is better than implicit.
                  Выглядит как издевательство.
                  Ответить
                  • В питоне флоат это вроде и есть дабл. Правильнее называть его floating-point number а не float. А 32-битных флоатов, емнип, вообще не существует.

                    > pow(3,64) по сигнатуре не подходит к сишной функции
                    Так в сишке же нет перегрузок! Поэтому все отлично подходит: инты кастанутся в даблы да вызовется. Флоаты тоже кастанутся в даблы.
                    Ответить
                    • >инты кастанутся в даблы да вызовется
                      Неявно! Они ж могли просто оставить точно такой же pow (совместимость с math.h), аргументируя борьбой с неявным.
                      И сделать fpow, если сильно хотелось.

                      А масла в огонь подливает отличная справка.
                      >>> help(math.pow)
                      Help on built-in function pow in module math:
                      
                      pow(...)
                          pow(x, y)
                      
                          Return x**y (x to the power of y).
                      
                      >>> help(pow)
                      Help on built-in function pow in module builtins:
                      pow(...)
                          pow(x, y[, z]) -> number
                      
                          With two arguments, equivalent to x**y.  With three arguments,
                          equivalent to (x**y) % z, but may be more efficient (e.g. for longs).

                      Ни слова о float.
                      Ответить
                      • Обратите внимание math.pow "Return x**y (x to the power of y)."
                        Но в реале то x**y, не эквивалентен math.pow(x,y)
                        И в сишке Wconversion ругнётся, если не при конверте в double, так при сохранении результата в int.
                        Ответить
                      • Докстринг забаговали, лол ;) А в онлайн-справке более-менее понятно, и с намеком на флоаты...
                        Ответить
            • В посте примера написал import math, ибо хз как достучаться к функции pow без неймспейса, когда её перебили импортом.
              Вот простая строка, меняющая всё:
              from math import *
              Ответить
              • import __builtin__
                __builtin__.pow
                Ответить
                • Ёпты, я же так и пишу.
                  Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named __builtin__
                  Во втором работало, да.
                  Ответить
                  • так нахуй на третий перешел?
                    Ответить
                    • >так нахуй на третий перешел?
                      Потому что builtins.pow короче чем __builtin__.pow
                      Ответить
              • > from math import *
                Это как using namespace в крестах. С одной стороны писать меньше, а с другой - раскладывает грабли на дороге.
                Ответить
              • P.S. Судя по крестоблядскому опыту лучше никогда так не делать... А юзать либо math.hui (явно указывая, откуда этот хуй взят), либо from math import hui, pizda, djigurda (явно указав, что именно мы оттуда хотим).

                А полный импорт неймспейса - зло, хотя и заманчиво. Мало ли чего там подсунут кроме этого math.pow()...
                Ответить
                • >>math.hui

                  математические хуи такие математические...

                  Ну если нам нужен один хуй - то да. А если 1001 то лучше показать какие хуи нинужоны
                  Ответить
                  • > А если 1001
                    То код - ёбаное говнище. Зачем тебе столько top-level классов/функций/переменных в одном модуле?

                    > то лучше показать какие хуи нинужоны
                    Если компилятор умеет материться на конфликты, как тот же хаскель - да, соглашусь. А если, как питон, молча затирает первые и оставляет самый последний - нет, не лучше.
                    Ответить
                    • Большая часть кода в этом тленном мире - говно. Мне нинадо.

                      Ну ладно, сколько функций ты готов экспортировать руками?
                      Ответить
                      • > экспортировать
                        Импортировать же.

                        Если честно, то после крестов-бустов меня совсем не напрягает писать math.pow() после import math. И from math import pow, fabs тоже не напрягает. Так что сколько надо будет по задаче - столько и импортну. А from math import * я оставлю ленивым экстремалам, жрите свой кактус сами.

                        P.S.
                        typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> ssl_socket;
                        Ответить
                        • >>Импортировать же

                          Да, карликовый лев попутал меня

                          На вкус и цвет...
                          Ответить
                          • > На вкус и цвет...
                            Ты просто никогда не налетал на эти косяки...

                            И 146%, что Пи после вчерашнего батхёрта тоже больше никогда не будет юзать from че-то import * :)
                            Ответить
                            • Ну да, в дотнете я всегда пишу Math.Hui(). Пока гром не грянет мужик не перекрестится
                              Ответить
                            • > не будет юзать from че-то import *

                              Я вообще против введения такого синтаксиса в языки. Он может позволять меньше думать при написании, но сильно мешает читать (и, соответственно, ревьюить) код.

                              В Go молодцы ребята, сделали обязательноую явную квалификацию при вызове всех функций из других модулей. Респект.

                              Хачкель является ярким примером: открываешь типичные исходники, а там 100500 неквалифицированных импортов, и хер знает, где смотреть сигнатуры и доки используемых функций. Ненавижу тех, кто так делает. Благо, есть механизмы, чтобы сделать читабельно.
                              Ответить
                            • >тоже больше никогда не будет юзать from че-то import * :)
                              В жаве import static * тоже недолюбливаю. Дело даже не в том что оно в таких ситуация выдаёт ошибку со словом ambigous.
                              Просто без IDE совсем непонятно из какого класса/пакета пришёл метод.
                              Конечно я его частенько использую, много либ заточены именно на него.

                              >typedef boost::asio::ssl::stream<boost::asio::ip ::tcp::socket> ssl_socket;
                              Но вот в жабе я пару лет назад придумал для себя улучшенный импорт с алиасом. Причем с ограничением неймспейса по методу/классу:
                              public <K extends java.util.Calendar> void a(){
                                   K.JANUARY //ВНЕЗАПНО женерики несут пользу и свет
                              }
                              Предпочитаю это import static *
                              Может кто-то додумался до этого раньше, но я на просторах интернета и в книжках не встречал такого.
                              Ответить
                              • > Просто без IDE совсем непонятно из какого класса/пакета пришёл метод

                                Про то и речь. Фанатики могут сколько угодно кричать "возьмите ИДЕ нищеброды", только вот они будут пищать как девчонки, когда придёт пора ревьюить код в типичном ревью-туле в браузере.

                                Разработчики жабы не учли естественной потребности в алиасах, которые были в крестах с незапамятных времён, в итоге имеем унылое нечитабельное говно со звёздочками либо сотни однострочных импортов. Про отсутствие тайпдефов я вообще молчу.

                                Олсо, не совсем понял хак с алиасом. Можно ещё пример?
                                Ответить
                                • static <I extends java.lang.Integer>void  a(){
                                  		int i=I.MAX_VALUE;
                                  		System.out.println ( I.numberOfLeadingZeros ( i ) );
                                  	}
                                  	static <L extends java.lang.Long>void  b(){
                                  		long l=L.MAX_VALUE;
                                  		System.out.println ( L.numberOfLeadingZeros ( l ) );
                                  	}
                                  Обратите внимание: мы не засираем неймспейс класса, импорт ограничен только телом метода.
                                  http://ideone.com/urrN0b
                                  Если писать короткие методы - всё на виду. Не надо прыгать вверх класса.
                                  Ответить
                                  • Теперь понятно, занятная идея :)
                                    Ответить
                                    • >Разработчики жабы не учли естественной потребности в алиасах,
                                      В 5-ой жабе сделали, только никому не сказали :)
                                      Ответить
                              • После изучения скалки, кстати, я понял, как в жавке можно делать небольшие "модули".

                                Можно завести "статический" класс /com/my/module.java (именно с маленкой буквы), и запихать в него все родственные интерфейсы, енумы и классы.

                                Это позволяет имитировать явную квалификацию имён модулей без указания полного имени пакета.
                                import com.my.module;
                                
                                // ...
                                module.Iface doStaff() {
                                  return module.staticFunc(...);
                                }
                                Ответить
                                • Я так и делаю.
                                  Оно даже на DSL становится похоже.
                                  Ответить
          • ****     ****    ******    ****      ****     ***       ****            ****  **          ******     
             **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   
             **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  
             **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  
             **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  
             *****        **        **  **    *   **  **        **   **        **   **        **   **        **  
             **  **       **        **  **     *  **  ************   **      **     **        **   **        **  
             **    **     **        **  **      * **  **        **   **   **        **        **   **        ** 
             **     **    **        **  **       ***  **        **   **     **      **       **    **        **  
             **      **    **      **   **        **  **        **   **       **    **     **       **      **   
            ****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     
            

            Ответить
      • ****     ****    ******    ****      ****     ***       ****            ****  **          ******     
         **      **    **      **   **        **     **  **      ** ** ** *     **      **      **      **   
         **     **    **        **  ** *      **    **    **     **        **   **       **    **        **  
         **    **     **        **  **  *     **   **      **    **        **   **        **   **        **  
         **  **       **        **  **   *    **  **        **   **        **   **        **   **        **  
         *****        **        **  **    *   **  **        **   **        **   **        **   **        **  
         **  **       **        **  **     *  **  ************   **      **     **        **   **        **  
         **    **     **        **  **      * **  **        **   **   **        **        **   **        ** 
         **     **    **        **  **       ***  **        **   **     **      **       **    **        **  
         **      **    **      **   **        **  **        **   **       **    **     **       **      **   
        ****     ****    ******    ****     **** ****      **** ****      ****  **** **           ******     
        

        Ответить
    • Въебал сразу по два минуса ублюдкам!..
      Ответить

    Добавить комментарий