Ебанет
Должно.
'1'+1=11
Да что тут непонятного, " - " применяется только к числам, по этому строка "5" приводится к числу и из 5 вычитается 2.
" + " применяется как к числам для сложения, так и к строкам для конкатенации, первый операнд строка"5", значит применяем конкатенацию, приводя 3 к строке и получаем "53".
А последний пример комбинация из двух первых по сути, только к двум применяется унарный оператор " - ", "2" приводится к числу 2, добавляется отрицание -2, приводится опять к строке "-2", а потом конкатенируется с "5"!
" + " применяется как к числам для сложения, так и к строкам для конкатенации, первый операнд строка"5", значит применяем конкатенацию, приводя 3 к строке и получаем "53".
А последний пример комбинация из двух первых по сути, только к двум применяется унарный оператор " - ", "2" приводится к числу 2, добавляется отрицание -2, приводится опять к строке "-2", а потом конкатенируется с "5"!
Но лучше бы я стал проституткой...
Да я-то понимаю, но если код на тысячи строк, то каждый раз вчитываться в подобное и прикидывать в голове - теряешь кучу времени.
А если у тебя там еще не константы, а пара переменных, которые пришли из разных мест через несколько слоев вызовов функций, то это, вообще, поле чудес с попыткой угадать "5" там было или 5.
А если у тебя там еще не константы, а пара переменных, которые пришли из разных мест через несколько слоев вызовов функций, то это, вообще, поле чудес с попыткой угадать "5" там было или 5.
весь фронт в труху
'2' + 2
22
У меня уже защитный механизм от плохих ситкомов - закадровый смех вызывает отвращение
но тут-то он искренний
Но это вовсе не закадровый смех. Это смех аудитории, это было живое выступление.
бля, это было охуительно! есть ещё?
'22'
а вот хуй знает, какого оно будет типа.
Очевидно, что если получилось не 4, то string
Ну, зачем так усложнять?
let pidor = +traps + +memes;
let pidor = +traps + +memes;
Обязательно ебанёт.
Большая чясть механизма определяет тип данных на каждом этапе сложения.
Ищет в npm библиотеку для сложения чисел
Если npm install add-two-integers не сработало - то всё, числа складывать не удаётся, слишком сложная задача, на неё даже никто модуль не написал ещё.
Так только джун ответит. Опытный фронтенд сделает запрос на бэк, а дальше это проблема разработчиков, на фронте всё работает
Сначала посмеялся, потом представил что правда будут дёргать бэк для складывания чисел, и посмеялся ещё раз. Спасибо! :-D
Ох, если бы это были шутки
Я как-то видел код, где число переводили строку. И дергали для этого бэк.
можно создать div, дальше двумя циклами напичкать его спанами и в конце узнать кол-во спанов внутри дива.
Просто наберите в консоли 0.1+0.2 и поймете почему
Но fixed point math сильно проще чем то, что на картинке. Даже на js. Другой вопрос, что надо вовремя понять, что тебе надо fixed point.
Числа с плавающей точкой это адъ и Израиль не только в JS. Ноги растут от стандарта обработки и записи этих чисел в память компьютера.
"Стандарт обработки"?! Не знаю с какой планеты ты достал компьютер, но у нас тут это все упирается в, мать его, физический принцип хранения и передачи данных. Который в свою очередь растет из фундаментальной науки, дискретной математики, на основе которой и были созданы компьютеры.
IEEE 754 - стандарт работы с двоичными числами с плавающей точкой. Почти вся вычислительная техника сегодня следует этому стандарту. Это не единственный стандарт цифровой арифметики и далеко не единственный возможный. Никакая фундаментальная наука не запрещает нам использовать троичные/четверичные вычислительные машины (не решит проблему точности) и другие способы представления дробного числа в памяти машины. Просто есть стандарт, и ему следуют для совместимости и переносимости программ.
Никто, конечно же, не мешает.
Но в реальном мире процессоры поддерживают работу с дробными числами только в этом формате. Потому если ты хочешь другой, то будь готов реализовывать его руками(ну или брать либу), и будь готов к критической просадке производительности, если тебе нужно много арифметики. Потому что тебе всю блядскую арифметику придется делать самому.
И, на самом деле, абсолютно везде, где идёт работа с деньгами, то есть, дробные числа это суммы денег, всё делается именно таким образом. Потому что точность там намного важнее скорости.
А, скажем, просчёт сцены для игры - на неточных, но быстрых флоатах.
Но в реальном мире процессоры поддерживают работу с дробными числами только в этом формате. Потому если ты хочешь другой, то будь готов реализовывать его руками(ну или брать либу), и будь готов к критической просадке производительности, если тебе нужно много арифметики. Потому что тебе всю блядскую арифметику придется делать самому.
И, на самом деле, абсолютно везде, где идёт работа с деньгами, то есть, дробные числа это суммы денег, всё делается именно таким образом. Потому что точность там намного важнее скорости.
А, скажем, просчёт сцены для игры - на неточных, но быстрых флоатах.
Дроби это далеко не обязательно floating point. Никто не отменял fixed point, что собственно всегда и используется для денег.
Не всегда.
У тебя может быть несколько процессов с разной точностью. По обстоятельствам, не зависящим от тебя. Грубо говоря, где-то используется точность до цента, а где-то до сотой доли цента. Несмотря на то, что физически десятых и сотых долей цента не существует, в расчётах они могут участвовать. И внешние сервисы могут использовать различную точность, и тебе нужно с ними коммуницировать.
Есть также сервисы, которые в протоколе указывают, сколько знаков после запятой используется, и это число изменяемое в зависимости от специфики.
Так что - нет, нихуя оно не фиксед в общем случае.
У тебя может быть несколько процессов с разной точностью. По обстоятельствам, не зависящим от тебя. Грубо говоря, где-то используется точность до цента, а где-то до сотой доли цента. Несмотря на то, что физически десятых и сотых долей цента не существует, в расчётах они могут участвовать. И внешние сервисы могут использовать различную точность, и тебе нужно с ними коммуницировать.
Есть также сервисы, которые в протоколе указывают, сколько знаков после запятой используется, и это число изменяемое в зависимости от специфики.
Так что - нет, нихуя оно не фиксед в общем случае.
Попробую на пальцах простой пример, без конкретики.
Смотри.
Если у нас перевод денег со счёта на счёт, то точность - до минимальной расчётной единицы валюты. Обычно это 2 знака от целого значения в валюте(2.55 доллара), и 0 знаков от количества в минимальных единицах(255 центов). Впрочем, подлянка и тут в том, что у валют это разное количество. Например, у венгерского форинта нет "копеек", минимальная единица это сам форинт.
Но если ты считаешь комиссию, или другой процент, то у тебя точность - это (порядок разницы минимальной единицы к основной) + 2 +(максимальное количество знаков после запятой в сумме процентной ставки).
То есть, для доллара, и только целых процентов, это 2+2+0. Для форинта, когда процент возможен типа 1.5 - это 0+2+1.
Смотри.
Если у нас перевод денег со счёта на счёт, то точность - до минимальной расчётной единицы валюты. Обычно это 2 знака от целого значения в валюте(2.55 доллара), и 0 знаков от количества в минимальных единицах(255 центов). Впрочем, подлянка и тут в том, что у валют это разное количество. Например, у венгерского форинта нет "копеек", минимальная единица это сам форинт.
Но если ты считаешь комиссию, или другой процент, то у тебя точность - это (порядок разницы минимальной единицы к основной) + 2 +(максимальное количество знаков после запятой в сумме процентной ставки).
То есть, для доллара, и только целых процентов, это 2+2+0. Для форинта, когда процент возможен типа 1.5 - это 0+2+1.
Причем весь финансовый мир сидит в excel, где тоже флоаты, и не жужжит. А программистам видите ли неудобно.
На эксель в лучшем случае отчёты. Подсчёт денег давно не на экселе, и флоатов там давно нет. Уже дохуя лет как.
Кстати вспомнилось, android calculator встроенный где-то в ~android 4. Не заморачивались ребята и просто считали в double. На больших числах (даже целых, не дробных), которые я просто складывал, оно умудрялось считать неправильно.
С decimal таких проблем нет.
так это работает в подавляющем большинстве языков, а не только в JS
Ага, а пуфон ещё и неявно маскирует это дело как-будто всё норм, хотя на самом деле погрешность спокойно себе копится.
в дырке - баги
А в руке костыль
В руке дебаггер
Щуп осцилла
Аппаратные, недокументированные
A аналогичной фотографии специалистов по машинному обучению вообще не существует.
Справедливо
Да ну фигня какая-то. Точно уже есть модуль, делающий это. Может даже всего-то в 500кб размером.
Так это квантовый компьютер, и он складывает вообще все возможные пары чисел
Не так. Он складывает все пары мнимых чисел без проблем. А потом получает два натуральных числа и падает с сегфолтом.
Кэп? Нельзя 2 int переменной сложить?
В жабаскрипте нету двух int переменных. Есть просто 2 переменных, а инт они, или нет - ты не знаешь. Плюс, в джаваскрипте сложить можно что угодно с чем угодно, но результат может быть неожиданный.
Прикольно, а в чём смысл?
Я не знаю.
Это добавляет геморроя проверки типа каждый раз, если надо писать нормально, а не "хуяк, хуяк, и так сойдёт", добавляет геморроя при чтении кода(блять, какой же тип сука ожидается у этой ахуительной функции???), добавляет геморроя в виде stupid undefined behavior в рантайме, когда пришло что-то не то, обработалось странным образом без ошибок в какую-то дичь, и успешно улетело дальше.
Но этим мало того, что пользуются, некоторые это любят, и даже тащат на сервер. Повбывав бы.
Это добавляет геморроя проверки типа каждый раз, если надо писать нормально, а не "хуяк, хуяк, и так сойдёт", добавляет геморроя при чтении кода(блять, какой же тип сука ожидается у этой ахуительной функции???), добавляет геморроя в виде stupid undefined behavior в рантайме, когда пришло что-то не то, обработалось странным образом без ошибок в какую-то дичь, и успешно улетело дальше.
Но этим мало того, что пользуются, некоторые это любят, и даже тащат на сервер. Повбывав бы.
Меня ещё "веселит" что есть возможность явно определить тип переменной
Типа:
var result:Int = 1;
И в рантайме это может быть проигнорировано
Типа:
var num1:Int = 1;
var num2:Int = 1;
var result:Int = num1 + num2; // получится 11
Но пока что в топе по пиздецу кодинг на HAXE который потом конвертится в JS
Я пока над этим проджэктом работал - бухал жестко
Типа:
var result:Int = 1;
И в рантайме это может быть проигнорировано
Типа:
var num1:Int = 1;
var num2:Int = 1;
var result:Int = num1 + num2; // получится 11
Но пока что в топе по пиздецу кодинг на HAXE который потом конвертится в JS
Я пока над этим проджэктом работал - бухал жестко
А что вы на HaXe писали? И почему именно на HaXe?
Погуглил Haxe, то ли моя память глючит, то ли раньше он был HaXe.
Слот-машины(гэмблинг)
Там довольно большой проэкт был. Одних только погромистов 50+ шт
Там вообще весело было:
Изначально проэкт на чистом шарпе написан.
Потом шарповый код конвертится в Haxe
Потом хаксовый код конвертится в JS
Нахуя?
Насколько я понял, лид, который этот проект курировал пиздец как не любит юнити(изначально на неё планировали переписать)
И решил вот такое безобразие устроить
Там довольно большой проэкт был. Одних только погромистов 50+ шт
Там вообще весело было:
Изначально проэкт на чистом шарпе написан.
Потом шарповый код конвертится в Haxe
Потом хаксовый код конвертится в JS
Нахуя?
Насколько я понял, лид, который этот проект курировал пиздец как не любит юнити(изначально на неё планировали переписать)
И решил вот такое безобразие устроить
Уже 3й год как есть BigInt, который в определенном смысле даже лучше, чем встроенные целочисленные типы в строготипизированных языках, ибо он произвольной длины.
Прикольно
по большей части это примеры из разряда искусственных, которые в реале не делаются. хотя не так давно делал функцию клонирования записи, где надо собрать объект из пар [fieldname, value] разных типов. хотел пропустить через filter(n=>n) скипнуть null и [ ], заодно проебал все нули, а они были нужны. и долго не мог догнать в чем дело.
Чтобы написать коммент, необходимо залогиниться