Как компьютеры складывают числа? И ещё про бесконечность и NaN

  Рет қаралды 205,260

Хекслет

Хекслет

Күн бұрын

Пікірлер: 95
@arkark3479
@arkark3479 Жыл бұрын
0.1 + 0.2 = 0.10.2
@TankucT_AC
@TankucT_AC Жыл бұрын
А чего ты в кавычки не взял?
@_VladMir_
@_VladMir_ 2 жыл бұрын
Если вы хотите чтоб при 0.1+0.2 у вас был точный результат, так используйте decimal это к большинству языков относится. Код будет в js примерно такой a=0.1; b=0.2; c=new Decimal(a).add(new Decimal(b)) Ну и да в js нужно подключить decimal.js.
@ComicsNewsCity
@ComicsNewsCity 2 жыл бұрын
Можно же просто задать точность или разделить на 10. При это кол-во выделяемой памяти сопоставимо.
@aki7162
@aki7162 2 жыл бұрын
А нельзя просто использовать Math.toFixed?
@Rick_Jonson
@Rick_Jonson 2 жыл бұрын
Math.floor
@jankaban2871
@jankaban2871 Жыл бұрын
лепить костыли сбоку это так себе идея в js из коробки много способов пофиксить это, единственный косяк это конкатенация через +, вот здесь реально приходится принудительно левую сторону приводить к числовому значению чтобы не получить строку на выходе
@Terraforming1
@Terraforming1 Жыл бұрын
@@jankaban2871 о беда... тут ты получил на выходе строку, а в других языках получил бы ошибку... но js плохой, ага, ага.
@alenache1
@alenache1 2 жыл бұрын
кстати, NaN, который "не число" - это тип "число"
@lamer7367
@lamer7367 2 жыл бұрын
Это тип not a number
@alenache1
@alenache1 2 жыл бұрын
@@lamer7367 нет такого типа
@alenache1
@alenache1 2 жыл бұрын
@@lamer7367 typeof NaN==='number'
@ЕвгенийКрыж
@ЕвгенийКрыж 2 жыл бұрын
Ну так логично, описывает ситуацию, которую получили при попытке преобразования нечисла в число
@niklkelbon3662
@niklkelbon3662 2 жыл бұрын
NaN это значение, а не тип, совсем в своем питоне уже...
@AndreyDOTroot
@AndreyDOTroot Жыл бұрын
Negative infinity, а не minus Вроде
@ibazano9400
@ibazano9400 2 жыл бұрын
А можно формулировать как-то менее аматорски? Т.е. сказать что числа с плавающей точкой не дают точных результатов, и что при работа с ними желательно использовать round если есть необходимость в точности. А то как-то странно. Есть частный случай, и делайте с ним че хотите. Про NaN и прочее в принципе грамотно описано. Но опять же, опиши как это использовать. Хотя бы как type of сделать (если мы про JS).
@h0har7lshw
@h0har7lshw 2 жыл бұрын
А можно самому не аматорский видос записать?
@latentpseudointellectual5047
@latentpseudointellectual5047 2 жыл бұрын
Возможно подобные подробности специально опушены, потому что это выходит за рамки формата shorts. Так что если захочется, человек может сам почитать статьи на тему чисел с плавающей точкой, заинтересовавшись поднятой проблемой
@ЕвгенийКрыж
@ЕвгенийКрыж 2 жыл бұрын
Пример с 0.1 и 0.2 как яркий пример, вычисления с плавающей точкой давольно сложная задача в виду представления чисел в двоичной системе, при этом в компьютере к двоичной системе привязывается ещё одна фича, которую придумали ещё в бородатых временах для ускорения вычислений, если память не подводит, то в вычислениях используется ещё и мантисса числа для выражения чисел с плавающей точкой, короче тот ещё гемор, который придумали для упрощения задач. Это как с вычислением времени в пк, вроде костыль, но работает.
@apdgslfhsodbna
@apdgslfhsodbna 2 жыл бұрын
Ну использовать округление, чтобы потом сравнить тоже не очень безопасно, ибо вы можете непроизвольно округлить число менее предела погрешности, что приведёт к ошибочному сравнению, используйте decimal
@apdgslfhsodbna
@apdgslfhsodbna 2 жыл бұрын
Стандарт IEEE754, работает в любых языках)) Не сравнивайте числа с плавающей запятой, используйте формат decimal если для C#, в других языках тоже что-то подобное должно быть))
@zerxa
@zerxa 2 жыл бұрын
Так везде из-за некоторых особенностей железа для подсчета цифр с плавающей точкой. Сейчас выпускают CPU со встроенным GPU, а раньше выпускали CPU со встроенным вычислителем float значений.
@apdgslfhsodbna
@apdgslfhsodbna 2 жыл бұрын
@@zerxa , модуль операций с плавающей запятой появился для intel 8086 и назывался intel 8087, и по сей день никуда данные модули не пропадали, так как они внутри самого кристала современных процессоров
@zerxa
@zerxa 2 жыл бұрын
@@apdgslfhsodbna да, вы правы, я не совсем верно выразился. Ранее они были как отдельный CPU, а на данный момент являются частью самого CPU.
@apdgslfhsodbna
@apdgslfhsodbna 2 жыл бұрын
@@zerxa , угу, в современных кристаллах уже даже не только блоки floating point и аудио/видео кодеков, но и алгоритмов шифрования и хэш-сумм и даже блоки аппаратного ии
@glasderes
@glasderes Жыл бұрын
Кста по стандарту IEEE 754 предусмотрено целых 2 NaN и также +0 и -0
@QwDragon
@QwDragon Жыл бұрын
Вроде NaN'ов там гораздо больше.
@ВладимирКосицын-с6о
@ВладимирКосицын-с6о 2 жыл бұрын
4/0 = infinity, он что предел при x стремяшимся к 0 по автомату ищет?
@user-bu8sr7fm3t
@user-bu8sr7fm3t Жыл бұрын
это не проблема компьютеров а проблемы float'ов
@Za_pobedu_brat
@Za_pobedu_brat Жыл бұрын
Как же они умудрились использовать ЭВМ (компьютер) для расчётов траектории полётов космических кораблей, если бинарный формат не удобен?)
@vovam6565
@vovam6565 2 жыл бұрын
В видео говориться: "компьютер хранит числа в виде 0 и 1 и это не лучший формат для хранения чисел" Хотелось бы тогда узнать, а какой формат хранения чисел лучший?
@mrkust
@mrkust 2 жыл бұрын
На небольших квадратных бумажках 5*5 сантиметров в десятичной системе счисления)
@Terraforming1
@Terraforming1 Жыл бұрын
Фотоны друг мой. А вообще 1 и 2 лучше. От 0 одни беды, на него даже делить нельзя.
@Za_pobedu_brat
@Za_pobedu_brat Жыл бұрын
Подподушечный😂
@ImFreemanKZ
@ImFreemanKZ 2 жыл бұрын
Вкусный хлеб, спасибо.
@MemoresCode
@MemoresCode Жыл бұрын
Nan это число, потому что если в джс узнать его тип будет как раз число))
@alphredhitchcock2573
@alphredhitchcock2573 2 жыл бұрын
А тип данных указать?
@mapl8621
@mapl8621 2 жыл бұрын
🤨
@Terraforming1
@Terraforming1 Жыл бұрын
Какой? 1/10+2/10
@Sevelay
@Sevelay Жыл бұрын
Такие приколы не только в js
@imjustme673
@imjustme673 Жыл бұрын
Я как то увидела как калькулятор неправильно посчитал, с тех пор я им не верю
@АлексейКорноухов-з7л
@АлексейКорноухов-з7л Жыл бұрын
Давно известная проблема идущая от строения float и double в самом процессоре. Использовать их лучше в смысле быстродействия. Их их всегда хватает, ибо в реальной жизни числа округляются, ибо не может быть одной миллионной копейки. Однако в большинстве языков существует decimal, медленный, но вполне работающий. А вот если говорить про NaN, так это следствие самой логики JS, простота и все такое. Его ориентированность на мелкие поделки.
@Остап-ц5в
@Остап-ц5в Жыл бұрын
вроде NaN не "следствие логики js" он предусмотрен в том как "устроены float и double в самом процессоре"
@Aleksandr_Synesthesivich
@Aleksandr_Synesthesivich 2 жыл бұрын
Js такой злодей или в других языках тоже есть такая проблема?
@k4Ydf
@k4Ydf 2 жыл бұрын
Как минимум ещё в C++ и Python
@foxnorth2288
@foxnorth2288 2 жыл бұрын
Это проблема какой-то системы кодирования двоичных чисел, не помню названия, но довольно распространенной системы. Там проблема в том, что 0.1 нельзя правильно закодировать в этой системе
@foxnorth2288
@foxnorth2288 2 жыл бұрын
IEEE 754
@vlatterran
@vlatterran 2 жыл бұрын
С дробными числами у всех, а вот с NaN мало где есть. Будет просто ошибка, которая сама по себе не будет пытаться скрыться
@brothersstudio3566
@brothersstudio3566 2 жыл бұрын
@@k4Ydf у питона нельзя делить на строку. И на ноль тоже.
@Dreamcatcher_Lvl_
@Dreamcatcher_Lvl_ Жыл бұрын
такое будет не только в js а почти во всех нормальных яп
@МаксимТимошенко-у4у
@МаксимТимошенко-у4у 2 жыл бұрын
Кстати, a / 0 в нормальной математике не равно ничему, если а ≠ 0, 0 / 0 = бескончености
@Kvazar415
@Kvazar415 2 жыл бұрын
Эмм. Так то в видео всё верно, а вот у тебя не верно.
@user-bn6iu8uk1k
@user-bn6iu8uk1k 2 жыл бұрын
Так насчёт деления на ноль споры ведутся, то, что n/0 не равно ничему - это не навсегда, рано или поздно математики придут к единому мнению
@Ворвзаконе-г5у
@Ворвзаконе-г5у 2 жыл бұрын
все переврал a/0 если говорить про обычные числа то да ничему не равно, а/0 как предел если 0 бесконечно малое, то получается бесконечность. 0/0 в обычных числах не имеет смысла, а в пределах 0/0 это неопределенность
@Ворвзаконе-г5у
@Ворвзаконе-г5у 2 жыл бұрын
​@@user-bn6iu8uk1k о чем там спорить, решение этого выражения ( а/0) если говорить про обычные числа, то это любое число, поэтому и говорят что делить на 0 нельзя, но если хочешь можешь делить, просто это бесполезно
@user-bn6iu8uk1k
@user-bn6iu8uk1k 2 жыл бұрын
@@Ворвзаконе-г5у в каком смысле о чем тут спорить? Точно также, как изучение чисел больше бесконечности, не имеет никакого смысла казалось бы, но может быть полезно
@user-uh4js2tp2v
@user-uh4js2tp2v 2 жыл бұрын
Нас калькулятор поделит на ноль если попробуем это сделать
@ctacovsky
@ctacovsky Жыл бұрын
Потому что можно делить на ноль, и правда будет бесконечность
@super_man-ArtOfWar3
@super_man-ArtOfWar3 2 жыл бұрын
В питоне проблема решается просто: Импортируем нампай, делаем массив с двумя числами и указываем 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_
@_VladMir_ 2 жыл бұрын
float всегда будет давать неточные данные, нужно использовать decimal, как я знаю в питоне он есть)
@cool_dude_like_really
@cool_dude_like_really Жыл бұрын
Очень просто ))
@HexletOrg
@HexletOrg 2 жыл бұрын
Первая часть: kzbin.infoqR-hlI0lI5g?feature=share
@eded4891
@eded4891 2 жыл бұрын
А в питоне?
@super_man-ArtOfWar3
@super_man-ArtOfWar3 2 жыл бұрын
В питоне делаешь так: import numpy as np n = np.array([0.1, 0.2], dtype='float32') print(n.sum()) Правильная сумма без ошибки будет - n.sum()
@Terraforming1
@Terraforming1 Жыл бұрын
@@super_man-ArtOfWar3 кто мешает сделать подобным образом в js? Но нет, надо сопли пожевать, не программисты плохие, язык плохой. В макдаке вакансии тоже есть.
@Za_pobedu_brat
@Za_pobedu_brat Жыл бұрын
В питоне кролик которого он слопал
@Семён-ч7б
@Семён-ч7б 2 жыл бұрын
А если 0.25 и 0.65
@GMT_Project
@GMT_Project 2 жыл бұрын
0,9000000000000000004
@askalon7551
@askalon7551 2 жыл бұрын
Это ещё 0,3+0,3+0,3 не было
@dasstillsmile8458
@dasstillsmile8458 Жыл бұрын
JS походу проиграл decimal и строгой типизации, компьютер тут не причём, то что ты рассказываешь давно устарело.
@Terraforming1
@Terraforming1 Жыл бұрын
Что у тебя устарело? Консоль браузера открой и проверь. Твои если только знания устарели.
@MrSurecom
@MrSurecom 2 жыл бұрын
Видео мусор, обо всем и не о чем вообще
@centralasia186
@centralasia186 Жыл бұрын
Ничего не понял 😀
@ZhorikBR
@ZhorikBR Жыл бұрын
Ммм получилось 0.3
@СергейМоскалёв-с3ь
@СергейМоскалёв-с3ь Жыл бұрын
Этот мат.сопроцессор дурит - интел продавила этот убогий стандарт, - теперь мучаемся.
@tenoltosay
@tenoltosay Жыл бұрын
такой формат чисел с плавающей точкой, придумал один университет, и это один из нормальных способов, само по себе числа с плавающей точкой, могут быть бесконечно и то сколько он сможет туда вписать столько и получится поэтому при сложение в конце будет такое
@Terraforming1
@Terraforming1 Жыл бұрын
Как удивится автор, когда узнает что ('3'+0)*2 = 60
@cobalt2723
@cobalt2723 2 жыл бұрын
Автор знает что делить на ноль нельзя?
@cracker9320
@cracker9320 2 жыл бұрын
Аргументы?
@invinciblecame7336
@invinciblecame7336 2 жыл бұрын
Это не абсолютный ноль, это машинный ноль, а машинний ноль может быть равен 2Е-127 или 2E-308 для типов float и double. А значит мы имеем дело с БМЧ, на которое делить можно.
@Ворвзаконе-г5у
@Ворвзаконе-г5у 2 жыл бұрын
​@@invinciblecame7336 ну бмч и днления на него там нет, просто че то типо if число /0 then return infiniti
@MannawardKing
@MannawardKing Жыл бұрын
Да это же JavaScript. У него всё не как у людей.
@dungen_cat
@dungen_cat Жыл бұрын
Те самые уроки информатики:
@unidok_
@unidok_ Жыл бұрын
дефолт джаваскрипт
@slavaberdsky9666
@slavaberdsky9666 Жыл бұрын
Это бред. В с++ с числами все ок. Просто Ява и питон плохо написаны.
Как компьютеры складывают числа
14:27
Хекслет
Рет қаралды 482 М.
Что больше бесконечности?
22:16
Onigiri
Рет қаралды 1,9 МЛН
БУ, ИСПУГАЛСЯ?? #shorts
00:22
Паша Осадчий
Рет қаралды 2,8 МЛН
The Ultimate Sausage Prank! Watch Their Reactions 😂🌭 #Unexpected
00:17
La La Life Shorts
Рет қаралды 8 МЛН
This Game Is Wild...
00:19
MrBeast
Рет қаралды 126 МЛН
Тестировщик пропустил баг на прод. История моего факапа
5:46
Душный тестировщик | Эд Буренкин
Рет қаралды 1,2 М.
СДЕЛАЛ ИГРУ В БЛОКНОТЕ
4:26
Lokich
Рет қаралды 100 М.
Советский мультфильм про нашу жизнь !
13:49
Дедушка Аргентинца
Рет қаралды 6 МЛН
7  ПАРАДОКСОВ БЕСКОНЕЧНОСТИ
36:02
Mathin
Рет қаралды 902 М.
«Осень». Самая большая загадка Windows XP
14:36
Девять десятых
Рет қаралды 1,3 МЛН
БУ, ИСПУГАЛСЯ?? #shorts
00:22
Паша Осадчий
Рет қаралды 2,8 МЛН