Ты же не сам фоткал экран, а сделал это через специальный сайт?
Джой на телефоне включен был. А ты труба на компе. Ну согрешил разок, с кем не бывает.
Еще вариант: дают комп с вырваными USB и доступом только во внутреннюю сеть.
Ух... или динозаврия (тогда хоть можно поставить адаптер на усб) или паранойя.
Банковкая сеть
Параноидальный динозавр.
Теперь у меня еще больше вопросов.
В двоичном коде нет дроби 0.3
Вообще в двоичном коде дроби записываются иначе чем целые числа. Там они делят число 1
К примеру:
0,1 - это 0.5
0,01 - это 0.25
0,001 - 0.125
0,11 - 0,75
0,011 - 0,375
0,0101 - 0,3125
И т.д.
В общем ты не можешь в двоичном коде поделить 1 так, чтобы получить в итоге ровно 0,3.
Вообще в двоичном коде дроби записываются иначе чем целые числа. Там они делят число 1
К примеру:
0,1 - это 0.5
0,01 - это 0.25
0,001 - 0.125
0,11 - 0,75
0,011 - 0,375
0,0101 - 0,3125
И т.д.
В общем ты не можешь в двоичном коде поделить 1 так, чтобы получить в итоге ровно 0,3.
0.3 -- это десятичная дробь ее всегда можно представить виде точного числа в плавающей точкой.
Если в кратко то 0.3 = 3 * 10 ^ -1. А при записи числа с плавающей точкой в битовую строку запишется 3 и степень десятки (то есть -1).
А еще JS - это не компилируемый язык, так что все эти рассуждения про двоичный код здесь неуместны. Вся эта ситуация -- косяк интерпретатора
Если в кратко то 0.3 = 3 * 10 ^ -1. А при записи числа с плавающей точкой в битовую строку запишется 3 и степень десятки (то есть -1).
А еще JS - это не компилируемый язык, так что все эти рассуждения про двоичный код здесь неуместны. Вся эта ситуация -- косяк интерпретатора
Это decimal, а float и double как описано выше, прилагаю что это намеренно перенесённый косяк.
Добро пожаловать в мир операций с плавающей точкой. Числа с плавающей точкой (дроби) представляются в виде 32-х или 64-х битного числа в экспоненциальной форме, часть бит отводятся на мантиссу, а часть - на показатель степени (и один бит знака). Например, float (32 бит) имеет 8 бит экспоненты и 23 бита мантиссы. Число образуется следующим образом:
Т.е. полная мантисса (обратите внимание на единичку слева от М) лежит в интервале [1.0; 2.0). И да, это ДВОИЧНАЯ мантисса. И основание степени в числе тоже ДВА.
И теперь внимание вопрос: можно ли представить число 0.3 ТОЧНО в экспоненциальной форме с основанием ДВА? Ответ: нет, нельзя. И это не имеет отношения к джаваскрипту. Это стандарт IEEE 754, который применяется ВЕЗДЕ. Все современные процессоры имеют сопроцессоры для быстрой работы с числами с плавающей запятой (FPU). Все языки оперируют именно такими числами. Это везде. А человек, который создал картинку в посте, - долбоеб, который выучить только шутейки про джаваскрипт, но не знает основ.
И да, это приводит к проблемам. Например, нельзя просто так взять и сравнить два числа с плавающей запятой.
if(a == 0.5) // хер тебе в рыло, сраный урод
Это побитовое сравнение, и требует точного совпадения, которое может быть, а может не быть. Как правильно.
if(abs(a - 0.5)
Но это детский сад по сравнению с проблемой вычислительной устойчивости. Представь, что ты делаешь какие-то расчеты. Это может быть скучное решение уравнений на сраной лабе, расчет напряженности в крыло ебучего самолета или же физический движок твоей любимой игры. И куча методов расчета - итерационные, они считают одну и ту же хуйню стопицот раз, приближаясь к правильному ответу. Но если что-то пошло не так (например, ты дохуя раз прибавляешь очень маленькое число к очень большому), то весь твой расчет может пойти по пизде, дать неверные результаты или НЕ СОЙТИСЬ НАХУЙ! ДА, БЛЯТЬ, ВЗРЫВАЙ ЭТУ ЕБАНУЮ ФИЗИКУ! (Думаю, многие видели, как в разных играх с физикой объекты может распидорасить. Garrys's Mod это любит).
Т.е. полная мантисса (обратите внимание на единичку слева от М) лежит в интервале [1.0; 2.0). И да, это ДВОИЧНАЯ мантисса. И основание степени в числе тоже ДВА.
И теперь внимание вопрос: можно ли представить число 0.3 ТОЧНО в экспоненциальной форме с основанием ДВА? Ответ: нет, нельзя. И это не имеет отношения к джаваскрипту. Это стандарт IEEE 754, который применяется ВЕЗДЕ. Все современные процессоры имеют сопроцессоры для быстрой работы с числами с плавающей запятой (FPU). Все языки оперируют именно такими числами. Это везде. А человек, который создал картинку в посте, - долбоеб, который выучить только шутейки про джаваскрипт, но не знает основ.
И да, это приводит к проблемам. Например, нельзя просто так взять и сравнить два числа с плавающей запятой.
if(a == 0.5) // хер тебе в рыло, сраный урод
Это побитовое сравнение, и требует точного совпадения, которое может быть, а может не быть. Как правильно.
if(abs(a - 0.5)
Но это детский сад по сравнению с проблемой вычислительной устойчивости. Представь, что ты делаешь какие-то расчеты. Это может быть скучное решение уравнений на сраной лабе, расчет напряженности в крыло ебучего самолета или же физический движок твоей любимой игры. И куча методов расчета - итерационные, они считают одну и ту же хуйню стопицот раз, приближаясь к правильному ответу. Но если что-то пошло не так (например, ты дохуя раз прибавляешь очень маленькое число к очень большому), то весь твой расчет может пойти по пизде, дать неверные результаты или НЕ СОЙТИСЬ НАХУЙ! ДА, БЛЯТЬ, ВЗРЫВАЙ ЭТУ ЕБАНУЮ ФИЗИКУ! (Думаю, многие видели, как в разных играх с физикой объекты может распидорасить. Garrys's Mod это любит).
Спасибо парсеру реактора за мое счастливое детство.
if(abs(a - 0.5)
if(abs(a - 0.5)
насчет первого хз, а насчет второго - потому что когда конкатенируешь строку с чем-нибудь, что строкой не является, то все операнды выражения преобразуются в строки, и на выходе получается строка. с другой стороны, операция "-" для строк не определена. зато она определена для чисел, поэтому джаваскрипт пытается преобразовать все операнды операнды в числа (если это возможно - и в данном случае это так) и выдать числовой результат, а не Nan
Даже специальный сайт создали для таких как вы
https://0.30000000000000004.com/
https://0.30000000000000004.com/
А что ему не понравилось в правом столбике во втором? Так любой язык false отдаст.
Скоро уже 2019 год, а кто-то всё еше считает, что шутки про динамическую типизацию смешные
Шутки про попытки решить эти проблемы с помощью TypeScript смешные
Автор картинки - долбоеб. Ума на мейнстримовые шутки про JS хватило, а ума покурить как сам JS, так и базовые вещи - нет.
1) Всякие приведения чисел и строк, тем более массивов, булеанов - это, конечно, пиздец.
2) Floating point - это не пиздец, это везде, выше написали уже
3) true == 1 и true === 1 - так в жс специально запилили костыль-оператор "===" для точного сравнения без приведения типов.
1) Всякие приведения чисел и строк, тем более массивов, булеанов - это, конечно, пиздец.
2) Floating point - это не пиздец, это везде, выше написали уже
3) true == 1 и true === 1 - так в жс специально запилили костыль-оператор "===" для точного сравнения без приведения типов.
Пиздец, что-то из чёрной магии.
Чтобы написать коммент, необходимо залогиниться
Почему 9+"1" - на выходе строка (или чар?), а 91-"1" - на выходе число?
Что это за шайтанство?