javascript :: языки программирования :: it-юмор :: картинка с текстом :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

картинка с текстом javascript языки программирования it-юмор geek 
картинка с текстом,javascript,языки программирования,it-юмор,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор
Подробнее

картинка с текстом,javascript,языки программирования,it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
Еще на тему
Развернуть
'1'+1=11
Да что тут непонятного, " - " применяется только к числам, по этому строка "5" приводится к числу и из 5 вычитается 2.
" + " применяется как к числам для сложения, так и к строкам для конкатенации, первый операнд строка"5", значит применяем конкатенацию, приводя 3 к строке и получаем "53".
А последний пример комбинация из двух первых по сути, только к двум применяется унарный оператор " - ", "2" приводится к числу 2, добавляется отрицание -2, приводится опять к строке "-2", а потом конкатенируется с "5"!
Но лучше бы я стал проституткой...
Да я-то понимаю, но если код на тысячи строк, то каждый раз вчитываться в подобное и прикидывать в голове - теряешь кучу времени.
А если у тебя там еще не константы, а пара переменных, которые пришли из разных мест через несколько слоев вызовов функций, то это, вообще, поле чудес с попыткой угадать "5" там было или 5.
Ебанет
весь фронт в труху
'2' + 2
перейдем сразу к классике
https://www.destroyallsoftware.com/talks/wat
У меня уже защитный механизм от плохих ситкомов - закадровый смех вызывает отвращение
но тут-то он искренний
Но это вовсе не закадровый смех. Это смех аудитории, это было живое выступление.
бля, это было охуительно! есть ещё?
'22'
а вот хуй знает, какого оно будет типа.
Очевидно, что если получилось не 4, то string
Ну, зачем так усложнять?
let pidor = +traps + +memes;
let it = bee
петь на сей мотив, а не битлов
Обязательно ебанёт.
Большая чясть механизма определяет тип данных на каждом этапе сложения.
Ищет в npm библиотеку для сложения чисел
Если npm install add-two-integers не сработало - то всё, числа складывать не удаётся, слишком сложная задача, на неё даже никто модуль не написал ещё.
Так только джун ответит. Опытный фронтенд сделает запрос на бэк, а дальше это проблема разработчиков, на фронте всё работает
Сначала посмеялся, потом представил что правда будут дёргать бэк для складывания чисел, и посмеялся ещё раз. Спасибо! :-D
Ох, если бы это были шутки
Я как-то видел код, где число переводили строку. И дергали для этого бэк.
можно создать div, дальше двумя циклами напичкать его спанами и в конце узнать кол-во спанов внутри дива.
Просто наберите в консоли 0.1+0.2 и поймете почему
> 0.1+0.2 <• 0.30000000000000004 >
Но fixed point math сильно проще чем то, что на картинке. Даже на js. Другой вопрос, что надо вовремя понять, что тебе надо fixed point.
Числа с плавающей точкой это адъ и Израиль не только в JS. Ноги растут от стандарта обработки и записи этих чисел в память компьютера.
"Стандарт обработки"?! Не знаю с какой планеты ты достал компьютер, но у нас тут это все упирается в, мать его, физический принцип хранения и передачи данных. Который в свою очередь растет из фундаментальной науки, дискретной математики, на основе которой и были созданы компьютеры.
IEEE 754 - стандарт работы с двоичными числами с плавающей точкой. Почти вся вычислительная техника сегодня следует этому стандарту. Это не единственный стандарт цифровой арифметики и далеко не единственный возможный. Никакая фундаментальная наука не запрещает нам использовать троичные/четверичные вычислительные машины (не решит проблему точности) и другие способы представления дробного числа в памяти машины. Просто есть стандарт, и ему следуют для совместимости и переносимости программ.
Никто, конечно же, не мешает.
Но в реальном мире процессоры поддерживают работу с дробными числами только в этом формате. Потому если ты хочешь другой, то будь готов реализовывать его руками(ну или брать либу), и будь готов к критической просадке производительности, если тебе нужно много арифметики. Потому что тебе всю блядскую арифметику придется делать самому.
И, на самом деле, абсолютно везде, где идёт работа с деньгами, то есть, дробные числа это суммы денег, всё делается именно таким образом. Потому что точность там намного важнее скорости.
А, скажем, просчёт сцены для игры - на неточных, но быстрых флоатах.
Дроби это далеко не обязательно floating point. Никто не отменял fixed point, что собственно всегда и используется для денег.
Не всегда.
У тебя может быть несколько процессов с разной точностью. По обстоятельствам, не зависящим от тебя. Грубо говоря, где-то используется точность до цента, а где-то до сотой доли цента. Несмотря на то, что физически десятых и сотых долей цента не существует, в расчётах они могут участвовать. И внешние сервисы могут использовать различную точность, и тебе нужно с ними коммуницировать.
Есть также сервисы, которые в протоколе указывают, сколько знаков после запятой используется, и это число изменяемое в зависимости от специфики.
Так что - нет, нихуя оно не фиксед в общем случае.
Не надо путать визуализацию с внутренним представлением. Показываться они могут до цента или до сотой доли цента, а финансовые вычисления - до пятого знака после запятой. И fixed point это формат хранения и правила операций. По сути, значение в fixed point это три целых числа: до запятой, после запятой и фиксированный порядок. И по сути это целочисленная арифметика.
Я ниже написал.
Точка может плавать. Никто не гарантирует одинаковый порядок, это невозможно для общего случая. Разве что для одной валюты, и одного типа операций.
Ну и ты прав, по сути, всё равно это переводится в целые, считается в них, но всё равно надо везде и всегда помнить, где эта сраная точка, для каждой операции, когда стыкуются два разных процесса с разной точностью(вычисление процента и фактическое движение по счёту, например), и стыковка с внешними сервисами.
Всё нужно считать до пятого знака.
Нет, это опасно. Особенно если ты работаешь не с одной валютой и сложными выебонами.
Надо тебе посчитать 1.257% от суммы, и ты уже теряешь точность со своими 5 знаками.
Не бывает быстрых вычислений без потери точности, вопрос лишь в правилах округления. Но я вообще имел в виду рубли. Вычисления с fixed point до пятого знака дают удовлетворительную точность.
Ну так если цель "удовлетворительная" точность, то вообще флоаты. Они дают ошибку в последнем знаке, и только на единицу в одном вычислении. В варианте "только 5 знаков", ошибка может быть в 6 знаке, что на несколько порядков больше, чем в последнем во флоате.
Но, да. Я работал со всеми валютами, кроме рубля - он сейчас забанен везде.
> Они дают ошибку в последнем знаке

Только вот для плавающей точки последний знак это могут быть сотни. Не сотые доли, а сотни.
Я, с некоторым опытом в финансах, если честно, вообще с трудом представляю себе понятие "удовлетворительная точность". Наши регуляторы за такую хуйню выебут и высушат. Нельзя просто так взять, и отбросить сумму денег при расчете в большинстве случаев. Даже если эта сумма для одной транзакции типа маленькая.
На сотнях миллионов транзакций получается нихуя не маленькая.
Удовлетворительная это, очевидно, удовлетворяющая правилам проведения финансовых вычислений.
И, насчёт быстрых вычислений.
Пока ты в рамках одного фин процесса, с одной валютой и требованиями, у тебя обычные лонги(в инты может не влезть), и просто рядом тусуются настройки количества знаков, валюты, и отэтовсе. Сами расчеты быстрые, бо целочисленные - пока мы в одной "системе координат".
Но на стыке (внутри, или для внешнего сервиса), где могут быть разные настройки той же точки, приходится это учитывать и конвертировать. По разным правилам - где-то и округление идёт, но чаще нет, там уже от конкретики зависит.
Попробую на пальцах простой пример, без конкретики.
Смотри.
Если у нас перевод денег со счёта на счёт, то точность - до минимальной расчётной единицы валюты. Обычно это 2 знака от целого значения в валюте(2.55 доллара), и 0 знаков от количества в минимальных единицах(255 центов). Впрочем, подлянка и тут в том, что у валют это разное количество. Например, у венгерского форинта нет "копеек", минимальная единица это сам форинт.
Но если ты считаешь комиссию, или другой процент, то у тебя точность - это (порядок разницы минимальной единицы к основной) + 2 +(максимальное количество знаков после запятой в сумме процентной ставки).
То есть, для доллара, и только целых процентов, это 2+2+0. Для форинта, когда процент возможен типа 1.5 - это 0+2+1.
Причем весь финансовый мир сидит в excel, где тоже флоаты, и не жужжит. А программистам видите ли неудобно.
На эксель в лучшем случае отчёты. Подсчёт денег давно не на экселе, и флоатов там давно нет. Уже дохуя лет как.
Кстати вспомнилось, android calculator встроенный где-то в ~android 4. Не заморачивались ребята и просто считали в double. На больших числах (даже целых, не дробных), которые я просто складывал, оно умудрялось считать неправильно.
С decimal таких проблем нет.
так это работает в подавляющем большинстве языков, а не только в JS
Ага, а пуфон ещё и неявно маскирует это дело как-будто всё норм, хотя на самом деле погрешность спокойно себе копится.
На этом изображении мы видим как два ассамблериста правят прошивку для микроконтролера.
в дырке - баги
А в руке костыль
В руке дебаггер
Щуп осцилла
Аппаратные, недокументированные
Хороший список всякого безумия в JS с объяснением, почему так:
What the f*ck JavaScript?
A аналогичной фотографии специалистов по машинному обучению вообще не существует.
Справедливо
Да ну фигня какая-то. Точно уже есть модуль, делающий это. Может даже всего-то в 500кб размером.
Так это квантовый компьютер, и он складывает вообще все возможные пары чисел
Не так. Он складывает все пары мнимых чисел без проблем. А потом получает два натуральных числа и падает с сегфолтом.
Кэп? Нельзя 2 int переменной сложить?
В жабаскрипте нету двух int переменных. Есть просто 2 переменных, а инт они, или нет - ты не знаешь. Плюс, в джаваскрипте сложить можно что угодно с чем угодно, но результат может быть неожиданный.
Прикольно, а в чём смысл?
Я не знаю.
Это добавляет геморроя проверки типа каждый раз, если надо писать нормально, а не "хуяк, хуяк, и так сойдёт", добавляет геморроя при чтении кода(блять, какой же тип сука ожидается у этой ахуительной функции???), добавляет геморроя в виде stupid undefined behavior в рантайме, когда пришло что-то не то, обработалось странным образом без ошибок в какую-то дичь, и успешно улетело дальше.
Но этим мало того, что пользуются, некоторые это любят, и даже тащат на сервер. Повбывав бы.
Меня ещё "веселит" что есть возможность явно определить тип переменной
Типа:
var result:Int = 1;
И в рантайме это может быть проигнорировано
Типа:
var num1:Int = 1;
var num2:Int = 1;
var result:Int = num1 + num2; // получится 11

Но пока что в топе по пиздецу кодинг на HAXE который потом конвертится в JS
Я пока над этим проджэктом работал - бухал жестко
А что вы на HaXe писали? И почему именно на HaXe?
Погуглил Haxe, то ли моя память глючит, то ли раньше он был HaXe.
Haxe, HaXe, HAXE, хакс
Я разные вариации встречал
Слот-машины(гэмблинг)
Там довольно большой проэкт был. Одних только погромистов 50+ шт
Там вообще весело было:
Изначально проэкт на чистом шарпе написан.
Потом шарповый код конвертится в Haxe
Потом хаксовый код конвертится в JS

Нахуя?
Насколько я понял, лид, который этот проект курировал пиздец как не любит юнити(изначально на неё планировали переписать)
И решил вот такое безобразие устроить
Уже 3й год как есть BigInt, который в определенном смысле даже лучше, чем встроенные целочисленные типы в строготипизированных языках, ибо он произвольной длины.
Прикольно
по большей части это примеры из разряда искусственных, которые в реале не делаются. хотя не так давно делал функцию клонирования записи, где надо собрать объект из пар [fieldname, value] разных типов. хотел пропустить через filter(n=>n) скипнуть null и [ ], заодно проебал все нули, а они были нужны. и долго не мог догнать в чем дело.
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
e* \
; -s Tomasz is building cloudash.dev 1d
^ npm install esllnt-conflg-airbnb
'••'.K r
Q 31 tn 683	5 023 ¿j »и	ТТгТ	lJ ■ R т-^И • ■	nTiiÏÏK'H'lilH		i I 11	тш
г		П[»]|	I Г* I ■ . V Я 1 I I в	/»Il 1	хйшТ	Щ
ж		Пш	Hií»lMhHHil!	|Д7	ijTTT	[¡iff ‘3’-’1’=
Traceback (most recent call last) File "<pyshell#2>"1 line 1, in <mo •3-T
TypeError: unsupported operand type(s) for 'str' and s » 4 in l <- false
Programmer Memes
@iammemeloper
Without a doubt, the best programming language
11:09 PM -Sep28, 2023 121.6K ¡ews
» let l = [1,2,3,4]
<- undefined
» 0 in l <- true
» "0" in l <- true
подробнее»

javascript языки программирования программирование geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор javascript programming languages programming geek

» 4 in l <- false Programmer Memes @iammemeloper Without a doubt, the best programming language 11:09 PM -Sep28, 2023 121.6K ¡ews » let l = [1,2,3,4] <- undefined » 0 in l <- true » "0" in l <- true
¡ndex.js
JavaScript Moment
1	console log(018 == '018');
2	console log(017 == ‘017');
3
■ Default: node index.js
true
false