Если вы хотите чтоб при 0.1+0.2 у вас был точный результат, так используйте decimal это к большинству языков относится. Код будет в js примерно такой a=0.1; b=0.2; c=new Decimal(a).add(new Decimal(b)) Ну и да в js нужно подключить decimal.js.
@ComicsNewsCity2 жыл бұрын
Можно же просто задать точность или разделить на 10. При это кол-во выделяемой памяти сопоставимо.
@aki71622 жыл бұрын
А нельзя просто использовать Math.toFixed?
@Rick_Jonson2 жыл бұрын
Math.floor
@jankaban2871 Жыл бұрын
лепить костыли сбоку это так себе идея в js из коробки много способов пофиксить это, единственный косяк это конкатенация через +, вот здесь реально приходится принудительно левую сторону приводить к числовому значению чтобы не получить строку на выходе
@Terraforming1 Жыл бұрын
@@jankaban2871 о беда... тут ты получил на выходе строку, а в других языках получил бы ошибку... но js плохой, ага, ага.
@alenache12 жыл бұрын
кстати, NaN, который "не число" - это тип "число"
@lamer73672 жыл бұрын
Это тип not a number
@alenache12 жыл бұрын
@@lamer7367 нет такого типа
@alenache12 жыл бұрын
@@lamer7367 typeof NaN==='number'
@ЕвгенийКрыж2 жыл бұрын
Ну так логично, описывает ситуацию, которую получили при попытке преобразования нечисла в число
@niklkelbon36622 жыл бұрын
NaN это значение, а не тип, совсем в своем питоне уже...
@AndreyDOTroot Жыл бұрын
Negative infinity, а не minus Вроде
@ibazano94002 жыл бұрын
А можно формулировать как-то менее аматорски? Т.е. сказать что числа с плавающей точкой не дают точных результатов, и что при работа с ними желательно использовать round если есть необходимость в точности. А то как-то странно. Есть частный случай, и делайте с ним че хотите. Про NaN и прочее в принципе грамотно описано. Но опять же, опиши как это использовать. Хотя бы как type of сделать (если мы про JS).
@h0har7lshw2 жыл бұрын
А можно самому не аматорский видос записать?
@latentpseudointellectual50472 жыл бұрын
Возможно подобные подробности специально опушены, потому что это выходит за рамки формата shorts. Так что если захочется, человек может сам почитать статьи на тему чисел с плавающей точкой, заинтересовавшись поднятой проблемой
@ЕвгенийКрыж2 жыл бұрын
Пример с 0.1 и 0.2 как яркий пример, вычисления с плавающей точкой давольно сложная задача в виду представления чисел в двоичной системе, при этом в компьютере к двоичной системе привязывается ещё одна фича, которую придумали ещё в бородатых временах для ускорения вычислений, если память не подводит, то в вычислениях используется ещё и мантисса числа для выражения чисел с плавающей точкой, короче тот ещё гемор, который придумали для упрощения задач. Это как с вычислением времени в пк, вроде костыль, но работает.
@apdgslfhsodbna2 жыл бұрын
Ну использовать округление, чтобы потом сравнить тоже не очень безопасно, ибо вы можете непроизвольно округлить число менее предела погрешности, что приведёт к ошибочному сравнению, используйте decimal
@apdgslfhsodbna2 жыл бұрын
Стандарт IEEE754, работает в любых языках)) Не сравнивайте числа с плавающей запятой, используйте формат decimal если для C#, в других языках тоже что-то подобное должно быть))
@zerxa2 жыл бұрын
Так везде из-за некоторых особенностей железа для подсчета цифр с плавающей точкой. Сейчас выпускают CPU со встроенным GPU, а раньше выпускали CPU со встроенным вычислителем float значений.
@apdgslfhsodbna2 жыл бұрын
@@zerxa , модуль операций с плавающей запятой появился для intel 8086 и назывался intel 8087, и по сей день никуда данные модули не пропадали, так как они внутри самого кристала современных процессоров
@zerxa2 жыл бұрын
@@apdgslfhsodbna да, вы правы, я не совсем верно выразился. Ранее они были как отдельный CPU, а на данный момент являются частью самого CPU.
@apdgslfhsodbna2 жыл бұрын
@@zerxa , угу, в современных кристаллах уже даже не только блоки floating point и аудио/видео кодеков, но и алгоритмов шифрования и хэш-сумм и даже блоки аппаратного ии
@glasderes Жыл бұрын
Кста по стандарту IEEE 754 предусмотрено целых 2 NaN и также +0 и -0
@QwDragon Жыл бұрын
Вроде NaN'ов там гораздо больше.
@ВладимирКосицын-с6о2 жыл бұрын
4/0 = infinity, он что предел при x стремяшимся к 0 по автомату ищет?
@user-bu8sr7fm3t Жыл бұрын
это не проблема компьютеров а проблемы float'ов
@Za_pobedu_brat Жыл бұрын
Как же они умудрились использовать ЭВМ (компьютер) для расчётов траектории полётов космических кораблей, если бинарный формат не удобен?)
@vovam65652 жыл бұрын
В видео говориться: "компьютер хранит числа в виде 0 и 1 и это не лучший формат для хранения чисел" Хотелось бы тогда узнать, а какой формат хранения чисел лучший?
@mrkust2 жыл бұрын
На небольших квадратных бумажках 5*5 сантиметров в десятичной системе счисления)
@Terraforming1 Жыл бұрын
Фотоны друг мой. А вообще 1 и 2 лучше. От 0 одни беды, на него даже делить нельзя.
@Za_pobedu_brat Жыл бұрын
Подподушечный😂
@ImFreemanKZ2 жыл бұрын
Вкусный хлеб, спасибо.
@MemoresCode Жыл бұрын
Nan это число, потому что если в джс узнать его тип будет как раз число))
@alphredhitchcock25732 жыл бұрын
А тип данных указать?
@mapl86212 жыл бұрын
🤨
@Terraforming1 Жыл бұрын
Какой? 1/10+2/10
@Sevelay Жыл бұрын
Такие приколы не только в js
@imjustme673 Жыл бұрын
Я как то увидела как калькулятор неправильно посчитал, с тех пор я им не верю
@АлексейКорноухов-з7л Жыл бұрын
Давно известная проблема идущая от строения float и double в самом процессоре. Использовать их лучше в смысле быстродействия. Их их всегда хватает, ибо в реальной жизни числа округляются, ибо не может быть одной миллионной копейки. Однако в большинстве языков существует decimal, медленный, но вполне работающий. А вот если говорить про NaN, так это следствие самой логики JS, простота и все такое. Его ориентированность на мелкие поделки.
@Остап-ц5в Жыл бұрын
вроде NaN не "следствие логики js" он предусмотрен в том как "устроены float и double в самом процессоре"
@Aleksandr_Synesthesivich2 жыл бұрын
Js такой злодей или в других языках тоже есть такая проблема?
@k4Ydf2 жыл бұрын
Как минимум ещё в C++ и Python
@foxnorth22882 жыл бұрын
Это проблема какой-то системы кодирования двоичных чисел, не помню названия, но довольно распространенной системы. Там проблема в том, что 0.1 нельзя правильно закодировать в этой системе
@foxnorth22882 жыл бұрын
IEEE 754
@vlatterran2 жыл бұрын
С дробными числами у всех, а вот с NaN мало где есть. Будет просто ошибка, которая сама по себе не будет пытаться скрыться
@brothersstudio35662 жыл бұрын
@@k4Ydf у питона нельзя делить на строку. И на ноль тоже.
@Dreamcatcher_Lvl_ Жыл бұрын
такое будет не только в js а почти во всех нормальных яп
@МаксимТимошенко-у4у2 жыл бұрын
Кстати, a / 0 в нормальной математике не равно ничему, если а ≠ 0, 0 / 0 = бескончености
@Kvazar4152 жыл бұрын
Эмм. Так то в видео всё верно, а вот у тебя не верно.
@user-bn6iu8uk1k2 жыл бұрын
Так насчёт деления на ноль споры ведутся, то, что n/0 не равно ничему - это не навсегда, рано или поздно математики придут к единому мнению
@Ворвзаконе-г5у2 жыл бұрын
все переврал a/0 если говорить про обычные числа то да ничему не равно, а/0 как предел если 0 бесконечно малое, то получается бесконечность. 0/0 в обычных числах не имеет смысла, а в пределах 0/0 это неопределенность
@Ворвзаконе-г5у2 жыл бұрын
@@user-bn6iu8uk1k о чем там спорить, решение этого выражения ( а/0) если говорить про обычные числа, то это любое число, поэтому и говорят что делить на 0 нельзя, но если хочешь можешь делить, просто это бесполезно
@user-bn6iu8uk1k2 жыл бұрын
@@Ворвзаконе-г5у в каком смысле о чем тут спорить? Точно также, как изучение чисел больше бесконечности, не имеет никакого смысла казалось бы, но может быть полезно
@user-uh4js2tp2v2 жыл бұрын
Нас калькулятор поделит на ноль если попробуем это сделать
@ctacovsky Жыл бұрын
Потому что можно делить на ноль, и правда будет бесконечность
@super_man-ArtOfWar32 жыл бұрын
В питоне проблема решается просто: Импортируем нампай, делаем массив с двумя числами и указываем dtype=float32, и вызываем sum() import numpy as np n = np.array([0.1, 0.2], dtype='float32') print(n.sum()) P.S.: Если неуказать dtype float32 то будет (то будет автоматически float64) ошибка такая же как и без нампай,если float16 то получится ответ 0.2998
@_VladMir_2 жыл бұрын
float всегда будет давать неточные данные, нужно использовать decimal, как я знаю в питоне он есть)
@cool_dude_like_really Жыл бұрын
Очень просто ))
@HexletOrg2 жыл бұрын
Первая часть: kzbin.infoqR-hlI0lI5g?feature=share
@eded48912 жыл бұрын
А в питоне?
@super_man-ArtOfWar32 жыл бұрын
В питоне делаешь так: import numpy as np n = np.array([0.1, 0.2], dtype='float32') print(n.sum()) Правильная сумма без ошибки будет - n.sum()
@Terraforming1 Жыл бұрын
@@super_man-ArtOfWar3 кто мешает сделать подобным образом в js? Но нет, надо сопли пожевать, не программисты плохие, язык плохой. В макдаке вакансии тоже есть.
@Za_pobedu_brat Жыл бұрын
В питоне кролик которого он слопал
@Семён-ч7б2 жыл бұрын
А если 0.25 и 0.65
@GMT_Project2 жыл бұрын
0,9000000000000000004
@askalon75512 жыл бұрын
Это ещё 0,3+0,3+0,3 не было
@dasstillsmile8458 Жыл бұрын
JS походу проиграл decimal и строгой типизации, компьютер тут не причём, то что ты рассказываешь давно устарело.
@Terraforming1 Жыл бұрын
Что у тебя устарело? Консоль браузера открой и проверь. Твои если только знания устарели.
@MrSurecom2 жыл бұрын
Видео мусор, обо всем и не о чем вообще
@centralasia186 Жыл бұрын
Ничего не понял 😀
@ZhorikBR Жыл бұрын
Ммм получилось 0.3
@СергейМоскалёв-с3ь Жыл бұрын
Этот мат.сопроцессор дурит - интел продавила этот убогий стандарт, - теперь мучаемся.
@tenoltosay Жыл бұрын
такой формат чисел с плавающей точкой, придумал один университет, и это один из нормальных способов, само по себе числа с плавающей точкой, могут быть бесконечно и то сколько он сможет туда вписать столько и получится поэтому при сложение в конце будет такое
@Terraforming1 Жыл бұрын
Как удивится автор, когда узнает что ('3'+0)*2 = 60
@cobalt27232 жыл бұрын
Автор знает что делить на ноль нельзя?
@cracker93202 жыл бұрын
Аргументы?
@invinciblecame73362 жыл бұрын
Это не абсолютный ноль, это машинный ноль, а машинний ноль может быть равен 2Е-127 или 2E-308 для типов float и double. А значит мы имеем дело с БМЧ, на которое делить можно.
@Ворвзаконе-г5у2 жыл бұрын
@@invinciblecame7336 ну бмч и днления на него там нет, просто че то типо if число /0 then return infiniti
@MannawardKing Жыл бұрын
Да это же JavaScript. У него всё не как у людей.
@dungen_cat Жыл бұрын
Те самые уроки информатики:
@unidok_ Жыл бұрын
дефолт джаваскрипт
@slavaberdsky9666 Жыл бұрын
Это бред. В с++ с числами все ок. Просто Ява и питон плохо написаны.