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

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    Pyhton 2:
    >>> (2**54/1) + 10 - 10 == 2**54
    True
    
    >>> (2**64/1) + 10  == 2**64
    False
    
    Pyhton 3:
    
    >>> (2**54/1) + 10 - 10 == 2**54
    False
    
    >>> (2**64/1) + 10  == 2**64
    True

    Pyhton 2: https://ideone.com/iqwl8L
    Pyhton 3: https://ideone.com/ltG9Fq

    Ну охуеть теперь.
    x + 10 - 10 != x в общем случае - это норма?
    Я всё понимаю - тяжёлое детство, инты, прибитые к железу, но на кой чёрт в современных интерпретируемых языках такое говнище?

    Запостил: 3.14159265, 13 Марта 2018

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

    • #напитон #seo

      Кстати в тройке починили баг.
      И сделали так чтобы код вёл себя консистентно с божественным js. Гы-ыгы-гы.
      Ответить
    • Это очень хуёво и стыдно для скриптоязыка

      Руби
      irb(main):001:0> (2**64/1) + 10
      => 18446744073709551626
      irb(main):002:0>�


      Питон 3
      Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 20:20:57) [MSC v.1600 64 bit (AM
      D64)] on win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> (2**64/1) + 10
      1.8446744073709552e+19
      >>>



      Внезапно:
      C:\>node
      > (2**64/1) + 10
      18446744073709552000
      >
      Ответить
      • >18446744073709552000
        Оно просто флоат прилично напечатало, дополнив
        1.8446744073709552e+19 парой нулей.

        Руби — моё почтение. Я всегда думал что это для хипстеров-гомосеков, а смотри: рациональные дробяшки. Годно
        irb(main):003:0> (2**-1)
        => (1/2)
        Ответить
        • даже не знаю что хуже
          Ответить
          • Хотя, не. Первое впечатление ложно. Гомосятина какая-то бессмысленная.

            irb(main):003:0* ((1/2)**-1)+(2/3)
            ZeroDivisionError: divided by 0
            
            irb(main):002:0> (((2)**-1)**-1)+(2/3)
            => (2/1)

            Всё-таки питон и жс хотя бы могут посчитать выражение ((1/2)**-1)+(2/3)
            Ответить
            • То ли дело Питон!
              >>> (Fraction(1, 2)**-1)+Fraction(2, 3)
              Fraction(8, 3)
              Ответить
              • Подуши моего питона
                Ответить
                • Задушил своего питона тебе за щёку, проверь.
                  Ответить
              • >(Fraction(1, 2)**-1)+Fraction(2, 3)

                Есть ли сахарок чтоб оно по дефолту в рациональных щитало?

                Чтоб не писать:
                Ехал Fraction через Fraction
                Видит Fraction: Fraction, Fraction.

                >from fractions import Fraction

                Мы же не пишем:
                from ints import Bigint
                from floats import Float
                from math import Complex
                Ответить
                • Дяденька, я змею на стройке нашёл! Надо спрашивать опытных змеедушителей, может, и можно как-нибудь запердолить такое. Или собрать свой Питон из сорцов!
                  Ответить
                  • >Дяденька, я змею на стройке нашёл!
                    Ггг.

                    >Или собрать свой Питон из сорцов!
                    Да, четвёртый по счёту!

                    Просто я иногда использую питух как калькулятор, мне муторно импортить каждый раз всю эту питушню.

                    >import math
                    >from fractions import Fraction


                    Хотелось бы как в js сразу math.* иметь под рукой. Я к тому что js как калькулятор лучше будет.
                    Ответить
                    • В саже (SageMath) 1/2 будет рациональным. Правда, поставить сажу по-нормальному практически невозможно.
                      Ответить
                    • from fractions import Fraction as F
                      print((F(1, 2)**-1)+F(2, 3))
                      Ответить
                    • > лень импортить
                      Ну запускай не голый питон, а свой скрипт, который все нужные модули подгрузит.
                      Ответить
    • Толи дело «Common Lisp»
      > (= (+ (/ (expt 2 54) 1)) (+ (/ (expt 2 54) 1) 10 -10))
      T
      
      > (/ 4 5)
      4/5
      Ответить
    • Потому, что ты дятел и неосилятор

      In [36]: (2**54/1)
      Out[36]: 18014398509481984L

      Что за /1? Ты float хотел?
      Ответить
    • > x + 10 - 10 != x в общем случае - это норма?
      В вашем ПТУ числа с плавающей точкой не проходили?
      Ответить
      • А тебя в Беркли учили что число 10 в общем случае представляется через IEEE 754?
        Ответить
        • Ты так и не понял почему x + y - y не всегда = x?
          Ответить
          • Я отлично понимаю почему это не так для плавающей точки, но Пи то бомбит от того что во втором и третьем питоне это отличается: typeof(1/1) будет интом в двойке и флоатом в тройке.

            "a - b + b == a" обычно верно для интов, ну а плавучку вообще через "==" сравнивать нелзя
            Ответить
            • > Я отлично понимаю почему это не так для плавающей точки
              Ну так?

              > Пи то бомбит от того что во втором и третьем питоне это отличается: typeof(1/1) будет интом в двойке и флоатом в тройке.
              Плохо быть питушком.
              Ответить
            • 3,14тушок может забыл что деление в двойке целочисленное, но проблема остается

              In [60]: float(2**54) + 10 - 10
              Out[60]: 1.8014398509481982e+16
              
              In [61]: float(2**54)
              Out[61]: 1.8014398509481984e+16

              C 2**64 вроде понятно: не хватает бит в мантиссе чтобы заметить прибавление/вычитание 10
              Ответить
      • Вдумался в вопрос. Действительно, почему?
        Ответить
    • Починил, проверь.
      >>> (2**54//1) + 10 - 10 == 2**54
      True
      Ответить
      • Проверил, годно!
        Ответить
      • OMG! В JS кстати тоже есть. Завезли не только **, но питонью фичу c // делением:
        >>54//1
        54
        
        >>(2**8//1
        )
        256
        
        Ответить
        • С делением на 1?

          Скоро до того дойдет для для каждой операции и каждого приоритета введут свой символ
          Ответить
        • Подловил, чертяка!
          Ответить

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