1. Go / Говнокод #26520

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    // sumEqual reports whether u + v == w exactly.
    func sumEqual(u, v, w float64) bool {
    	return (u+v == w) && (u == w-v) && (v == w-u)
    }

    https://github.com/golang/geo/blob/a8523298cefedcf7b70bbbf4eeef24cbb3258376/s2/edge_clipping.go#L182

    походу питух-затейник опять сбежал

    Запостил: Fike, 21 Марта 2020

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

    • Какой IEEE 754 )))
      Ответить
    • Орнул с анскильных отбросов.

      «Патамучто это плавающий питух, который априори говно. И чем вы быстрее это поймёте, чем будет лучше.» ⓒ
      Ответить
    • https://github.com/golang/geo/blob/a8523298cefedcf7b70bbbf4eeef24cbb3258376/s2/edge_clipping.go#L637
      // exit axis, and the target face containing the destination point B.
      func nextFace(face int, exit r2.Point, axis axis, n pointUVW, targetFace int) int {
      	// this bit is to work around C++ cleverly casting bools to ints for you.
      	exitA := exit.X
      	exit1MinusA := exit.Y
      
      	if axis == axisV {
      		exitA = exit.Y
      		exit1MinusA = exit.X
      	}
      	exitAPos := 0
      	if exitA > 0 {
      		exitAPos = 1
      	}
      	exit1MinusAPos := 0
      	if exit1MinusA > 0 {
      		exit1MinusAPos = 1
      	}


      Подожди, мразь бездарная. Ты ведь спастила валидный С++-код.
      Го-сектант это в 95% мразь, а в 5% просто обманутый/неразобравшийся человек. Почему же?

      Они зассали пастать нормальный синтаксис из С++, а именно кастование буленов в инты.
      Что такое bool? Это int, семантически.

      Обезьяна просто насрала код, который она спастила из C++. Выяснено откуда именно было паста (https://github.com/google/s2geometry)

      И код явно ворован из С++. Скорее всего обезьяна просто пыталась своровать из С++, но сделать непохоже на С++.
      Ответить
      • У них что нет clamp?
        Ответить
      • > Го-сектант это в 95% мразь, а в 5% просто обманутый/неразобравшийся человек. Почему же?

        Почему? Почему?
        Ответить
        • Потому что «зассали пастать нормальные касты из С».
          Потому что «сделали анскильный gc».
          Потому что «размер самых простых бинарников сотни мегабайт».
          Потому что «несмотря на указатели в Go нет адресной арифметики».
          Ответить
          • Пока из всего этого больше всего меня испугало отсутствие обобщенново программирования. Я теперь боюсь учить го
            Ответить
            • > боюсь учить го

              А что его бояться? Очень простой язык с которым любая макака справится...

              Другое дело, что это унылый и чисто практический язык чтобы сетевую опердень хуярить в энтерпрайзе. По фану на нём писать смысла никакого нет.
              Ответить
          • Есть реальный пример, когда нужна адресная арифметика?
            Ответить
    • https://github.com/google/s2geometry/blob/master/src/s2/s2edge_clipping.cc

      Очевидно, что сваять на ГОвне ничего нельзя - поэтому приходится воровать.

      Что потом отребье могло всем сообщить "дак я же как Сишка", "дак я же как С++".

      В том выхлопе( который я не видел по причине того, что это убожство писало безрукое анскильное питушко) я вижу ссылку на выхлоп какого-то питуха, который сложнее "идеального" решения детсадовской питушни не писал.

      Который не понимает разницу между программированием и борьбой с особенностями питушарского флоата. Знай он хоть 100500раз - он питух, который нихрена вменяемого не напишет.

      И такие питухи, которые постят пасты других питухов - питухи. Если ты не можешь сформулировать задачу, которую тебе надо решить - ты питух, а твой код питушня, который работает на изимодной копипасте формулок из интернетов(учебников).
      Ответить
      • > "дак я же как С++"

        Анскильные крестухи всё спиздили из Си, добавив сверху своего кривого крестодерьма со всякими там классами, наследованиями, неймспейсами, лямбдами, RTTI и прочей уебанской кривой дрисней.
        Ответить
        • Подожди, мразь бездарная. Ты ведь спастила валидный С-язык. Страуструп просто насрал говноязык, который он спастил из C. Выяснено откуда именно было паста (https://ru.wikipedia.org/wiki/Си_(язык_программирования) )

          Крестосектант это в 95% мразь, а в 5% просто обманутый/неразобравшийся человек. Почему же?

          Язык явно ворован из С. Скорее всего обезьяна просто пыталась своровать С, но сделать непохоже на С.
          Ответить
          • Смотрите, как надо:
            http://govnokod.ru/13180

            «Си++. Инновации, 21-йвек, 11-й год. auto и for(a:b). Прорыв, не то, что в этой питушарской сишке допотопной. А ведь это сишка могла 30лет назад».

            Царь, 15 июня 2013.
            Ответить
            • Я вообще рассматриваю C++ как надстройку над C, где добавили классы, шаблошы как улучшенные макросы и большую стандартную библиотеку (STL), но не лишенную недостатков типа string.find, std::vector<bool>, std::regex.
              Ответить
              • > шаблошы как улучшенные макросы

                Шаблоны до сих пор не могут в некоторых аспектах превзойти (заменить) макросы, какие ж они улучшенные тогда?
                Ответить
                • Есть реальные примеры таких аспектов?
                  Ответить
                  • Любая* кодогенерация.
                    Ответить
                  • #define DEBUG(x) std::cout << #x " is " << (x) << std::endl
                    Ответить
                    • Совсем реальный пример:
                      // 1. Give introspection capabilities to 'Person'
                      struct Person {
                        BOOST_HANA_DEFINE_STRUCT(Person,
                          (std::string, name),
                          (int, age)
                        );
                      };
                      // 2. Write a generic serializer (bear with std::ostream for the example)
                      auto serialize = [](std::ostream& os, auto const& object) {
                        hana::for_each(hana::members(object), [&](auto member) {
                          os << member << std::endl;
                        });
                      };
                      // 3. Use it
                      Person john{"John", 30};
                      serialize(std::cout, john);
                      // output:
                      // John
                      // 30

                      https://www.boost.org/doc/libs/1_61_0/libs/hana/doc/html/index.html
                      Ответить
                      • И гост8ушок/бароп после этого ещё смеют говорить что-то против обозначения "C/C++"?!
                        Ответить
                      • А GraphQL на таком можно сделать?
                        Ответить
                        • Не знаю. Это какой-то хипстерский ORM на джейсонах?
                          Ответить
                          • Не знаю, можно ли это назвать ORM.

                            Там прикол в том, что ты можешь запросить только часть полей модели.
                            Ответить
                            • Ну как бы я и в алхимии могу написать «query(User.name, User.otchestvo)». Не знаю, почему это выставляется какой-то киллерфичей. Внешне похоже на то, как хипстеры постоянно изобретают колесо.
                              Ответить
                          • эмм

                            Графкуэль работает с графами, а не с реялционными двумерными базами данных

                            Потому они и называют его граф куэь
                            Ответить
                      • Ну вот и завезли в С++ рефлексию
                        Ответить
                      • Если погуглить "BOOST_HANA_DEFINE_STRUCT" - говнокод там идет пятой ссылкой

                        А если посмотреть на то, как эта херня реализована, то

                        Вот эта херня на каком-то ERB https://www.stuartellis.name/articles/erb/
                        https://github.com/boostorg/hana/blob/e53c547207c4364f051d5ca7c244ffa03267af69/include/boost/hana/detail/struct_macros.hpp.erb


                        А вот эта херня из нее генерируется
                        https://github.com/boostorg/hana/blob/e53c547207c4364f051d5ca7c244ffa03267af69/include/boost/hana/detail/struct_macros.hpp


                        Т.е. одного препроцессора им оказалось мало.
                        Ответить
                        • >> на каком-то ERB

                          Всего лишь использовали «Руби» в качестве шоблонизатора. С тем же успехом можно было использовать любой скриптовый язык.
                          Ответить
                          • Почему б не использовать в качестве шаблонизатора сами кресты, чтобы не тянуть лишние зависимости?
                            Ответить
                            • А на чём интерпретатор «Ruby» написан?
                              /**********************************************************************
                              
                                ruby.c -
                              
                                $Author$
                                created at: Tue Aug 10 12:47:31 JST 1993
                              
                                Copyright (C) 1993-2007 Yukihiro Matsumoto
                                Copyright (C) 2000  Network Applied Communication Laboratory, Inc.
                                Copyright (C) 2000  Information-technology Promotion Agency, Japan
                              
                              **********************************************************************/


                              На «Plain C», даже не на крестах.
                              Ответить
                          • И вообще, лучше б чтоб гомоиконность!
                            Ответить
                        • <% (0..MAX_NUMBER_OF_MEMBERS).each do |n| %>
                          #define BOOST_HANA_ADAPT_STRUCT_IMPL_<%= n+1 %>(TYPE <%= (1..n).map { |i| ", m#{i}" }.join %>)    \
                              namespace boost { namespace hana {                                                            \
                                  template <>                                                                               \
                                  struct accessors_impl<TYPE> {                                                             \
                                      static constexpr auto apply() {                                                       \
                                          struct member_names {                                                             \
                                            static constexpr auto get() {                                                   \
                                                return ::boost::hana::make_tuple(                                           \

                          ебать, они правда так делают?!
                          Ответить
                          • Перепиши на PHP
                            Ответить
                            • Поддерживаю. Мы не обязаны знать язык для японских двухмерных девочек.
                              Ответить
                              • При выборе между руби и пхп я, разумеетсЯ, выберу руби.

                                При выборе между использовать руби как шаблонизатор для шаблонов на С++ и "застрелиться" я, разумеется, выберу "застрелиться"
                                Ответить
                                • А если добавить вариант «использовать „M4“ как шаблонизатор для „C++“»?
                                  Ответить
                                  • Сразу вспоминается вот эта простая, удобная и очевидная схема

                                    https://en.wikipedia.org/wiki/Autoconf#/media/File:Autoconf-automake-process.svg
                                    Ответить
            • >P.S. Не вброс.
              Ахахаха.

              Но Царь прав.
              Ответить
        • Факт.
          Ответить
    • Приведите реальный пример, когда из условий (u+v == w), (u == w-v) и (v == w-u) выполняются ровно два или одно, а не ноль и не три.
      Ответить
      • перегрузил оператор равняеца, проверь
        Ответить
        • Это слишком просто. А подобрать в плавающем питухе такие плохие значения, чтобы из-за ошибок округления что-нибудь портилось, реально?
          Ответить
          • Как это странно не звучит, проще всего написать программу, которая забрутфорсит всякие плавающие вореции.
            Ответить
          • с первой же попытки, проверь
            jshell> var x = 31.0/17
            x ==> 1.8235294117647058
            
            jshell> var y = 17.0/31
            y ==> 0.5483870967741935
            
            jshell> var z = x + y
            z ==> 2.3719165085388996
            
            jshell> z - y
            $9 ==> 1.823529411764706
            
            jshell> z - y == x
            $10 ==> false
            
            jshell> z - x == y
            $11 ==> false
            
            jshell> z == x + y                                                                                                                                                                                                                                                             
            $12 ==> true
            Ответить
            • Я рассчитывал, что нужно подбирать числа с резко различающимися порядками, чтобы после сложения значащие биты вылетали и округлялись, а оказалось, что достаточно чисел близких порядков. x и y различаются менее, чем в четыре раза.
              Ответить
            • jshell> x + y - x - y
              $6 ==> 2.220446049250313E-16

              это легально вообще?
              Ответить
              • питон 2: да не, эт нелегально
                питон 3: да не, эт легально

                какая совместимость ))))
                Ответить
                • > питон 2: да не, эт нелегально

                  я сначала всё запустил и проверил в третьем, увидел, что деление целых возвращает питуха, и не стал делать лишних проверок во втором, а зря - 31/17 там даёт 1

                  впрочем, всё еще небывалая совместимость ))))
                  Ответить
                  • Во втором 31/17 даёт 1, а 31.0/17 даёт 1.82352941176.
                    В третьем оба выражения дают плавающего питуха.
                    Ответить
      • короче, эта хуйня ВОООБЩЕ не работает

        jshell> Stream.iterate(0.1, i -> i + 0.1).limit(25).map(i -> i + 0.11 - i == 0.11).forEach(System.out::println);
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false
        false                                                                                                                                                                                                                                                                          
        false                                                                                                                                                                                                                                                                          
        false                                                                                                                                                                                                                                                                          
        false                                                                                                                                                                                                                                                                          
        false                                                                                                                                                                                                                                                                          
        false                                                                                                                                                                                                                                                                          
        false
        Ответить

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