написать впереди
Я обновляюсь в буддийском отделе.В этот раз буддийский отдел был давно.Я давно не писал.Много друзей меня бросили.На самом деле из-за смены работы и переезда ритм И время корректируется.Есть даже короткий абзац.Время немного тревожное,вы знаете,постепенно стабилизировалось,и частота должна быть выше в будущем,Олли~
Может быть, все больше склоняются к каким-то статьям, с которыми можно начинать сразу или с глазу на глаз.Честно говоря, от интервьюера можно спрятаться, но от себя все-таки не спрячешься, надо держать в разумТехнология! = Вопросы для интервью, должно быть много людей, которые будут игнорировать некоторые базовые вещи, но именно фундамент определяет высоту здания.
Несколько дней назад друг спросил меня о битовых операциях, на самом деле я планировал написать статью о битовых операциях, но посылка описания битовых операций заключается в том, что каждый должен иметь возможность четко понимать, что находится в компьютере.数字, Числа и битовые операции - это две разные вещи, поэтому прямые битовые операции могут быть не очень хорошими, поэтому я взял эту статью, чтобы исправить и опубликовать ее, и ее можно рассматривать как статью, которая выбивает половину из написанного, прежде чем я дойду до компенсируйте это.Тогда опубликуйте другую статью о побитовых операциях
Числа, очень распространенные вещи, все языки имеют цифры, большинство очков знаний в этой статье не только применимы кJavaScript,и другие языки похожи.Числа могут показаться простыми для всех на поверхности.На самом деле,переработка чисел с компьютера на сам язык относительно сложна.Надеюсь,эта статья сможет отразить тонкость чисел,поэтому я назвала ее .数字之美
бинарный
Всем должно быть известно, что компьютеры могут хранить только двоичные файлы.
Все мы знаем, что для хранения и работы с данными в компьютере используется двоичный код, потому что компьютер состоит из множества транзисторов, а транзистор имеет только 2 состояния, которые могут быть представлены двоичными 0 и 1, а использование двоичного кода может сделать внутренние правила работы компьютера просты, а стабильность высока, но, поскольку мы обычно не используем двоичный код напрямую, некоторые друзья могут забыть преобразовать десятичное число в двоичное.Вот краткое введение в качестве обзора.
Целое число в двоичное
Что касается преобразования десятичных целых чисел в двоичные, то это на самом деле очень просто, просто запомните секрет, и все.
除 2 取余,逆序排列
Разделите десятичное число на 2, чтобы получить частное и остаток, затем разделите частное на 2, чтобы получить новое частное и остаток, повторяйте, пока частное не станет равным 0, возьмите остаток, полученный первым, как старший бит двоичного числа, а остаток в виде двоичного числа Младший порядок порядка может быть
Например, мы преобразуем десятичное число 55 в основание 2.
55 % 2 // 商 27 余 1
27 % 2 // 商 13 余 1
13 % 2 // 商 6 余 1
6 % 2 // 商 3 余 0
3 % 2 // 商 1 余 1
1 % 2 // 商 0 余 1
Возьмите остаток и измените порядок, тогда результат преобразования десятичного числа 55 в двоичное будет110111
Двоичное значение это 1 бит, то есть 1 бит (bit), то если нам нужно получить 8-битный бинарник, то перед результатом преобразования добавляем 0
Например, 8-битный двоичный код десятичного числа 55 равен00110111, тогда могут быть люди, которые думают, что делать, если это 4 бита, 4 бита не могут хранить значение размером 55, переполнение
десятичный в двоичный
Могут быть люди, которые не понимают, как десятичные дроби преобразуются в двоичные, на самом деле есть методы и формулы.
乘 2 取整,顺序排列
Умножьте десятичную дробь на 2, чтобы получить произведение, отнимите целую часть произведения, умножьте оставшуюся дробную часть на 2, получите другое произведение, затем отнимите целую часть произведения и так далее, пока не получится целое число. часть произведения равна нулю, или целая часть равна 1, в это время 0 или 1 является последней цифрой двоичного числа или до тех пор, пока не будет достигнута требуемая точность, а затем расположите извлеченные целые части по порядку, целое число, взятое первым, равно используется как старший значащий бит двоичной дроби, а затем целое число как младший значащий бит
Например, преобразовать десятичную0.625преобразовать двоичный файл
0.625 * 2 = 1.250 // 取整数 1
0.25 * 2 = 0.50 // 取整数 0
0.5 * 2 = 1 // 取整数 1 并结束
порядок округления, затем десятичные дроби0.625Двоичный файл0.101
Если десятичное значение больше 1, то целая часть и дробная часть соответственно берутся в двоичном виде, а затем объединяются.
Например, преобразовать десятичную5.125преобразовать двоичный файл
Давайте сначала вычислим двоичный код целого числа 5
5 % 2 // 商 2 余 1
2 % 2 // 商 1 余 0
1 % 2 // 商 0 余 1
Тогда двоичное число 5 равно101, а затем посмотрите на дробную часть
0.125 * 2 = 0.250 // 取整数 0
0.25 * 2 = 0.50 // 取整数 0
0.5 * 2 = 1 // 取整数 1 并结束
тогда дробная часть0.125Двоичный файл001, объединение для получения десятичного числа5.125Двоичный файл101.001
Также будет такой случай, как десятичная дробь0.1взять его двоичный файл
0.1 * 2 = 0.2 // 取整数 0
0.2 * 2 = 0.4 // 取整数 0
0.4 * 2 = 0.8 // 取整数 0
0.8 * 2 = 1.6 // 取整数 1
0.6 * 2 = 1.2 // 取整数 1 -> 到此我们看到开始无限循环了
0.2 * 2 = 0.4 // 取整数 0
0.4 * 2 = 0.8 // 取整数 0
...
тогда его двоичный файл0.0001100......Этот повторяющийся цикл, который также приводит к нашим проблемам на уровне языка, таким как критикуемые в JS0.1 + 0.2 != 0.3проблема, мы поговорим об этом позже
Исходное, инверсное и дополнение
Прежде чем говорить о проблеме чисел в JS, нам также необходимо дополнить понятия исходного кода, обратного кода и дополнительного кода.Мы не будем здесь говорить о выводе, давайте рассмотрим его шаг за шагом, и, наконец, резюмируем, что такое исходный код. код, обратный код и дополнение
источник
В компьютере сохраняются самые примитивные числа, то есть числа без положительных и отрицательных, мы называем их беззнаковыми числами.
Если мы используем 4 бита (то есть 4 бита) для хранения беззнаковых чисел в памяти, это выглядит так
PS:Это также упоминается здесь.Конечно, вы также можете использовать 32 бита для понимания.Это только для того, чтобы объяснить концепции исходного кода, обратного кода и дополнительного кода.Разница только в количестве битов.Чем больше число цифр, тем больше диапазон значений, которые можно хранить.Об этом будет сказано позже.Это не важно, в основном потому, что 32-битная отрисовка слишком утомительна. . .
Мы, возможно, заметили, что, кажется, нет никакого способа выразить отрицательные числа.
Итак, чтобы выразить положительное и отрицательное, наши предки придумалиисходный код, освободите первый бит слева и сохраните знак, положительные числа представлены 0, а отрицательные числа представлены 1
Вышеприведенная картина положительная и отрицательная原码, вам может быть интересно, почему я рисую только цифру 7 в приведенной выше таблице, и она также упоминается выше, пример, который мы используем здесь, представляет собой 4-битный (битовый) метод хранения, хранятся только 4 бита, и один является бит знака, десятичное число 7 Двоичное выражение цифры равно 0111, двоичное число 8 вычисляется как 01000, что составляет 5 бит, поэтому его нельзя сохранить в 4-битном двоичном формате Поэтому, когда в двоичном формате хранятся только 4 бита, только значение исходного диапазона кода-7 ~ +7
原码Этот метод легко понять человеку, но машина его не понимает.Значение выражения не проблема, но как сложить положительное и отрицательное?
если мы используем(+1) + (-1), это равно 0, так как мы были в начальной школе, но согласно двоичному методу вычисления компьютера,0001 + 1001 = 1010, мы сравниваем исходную кодовую таблицу, которая равна -2
Очевидно, что это вычисление неверно, и мы увидим, что в исходном коде есть два представления 0: +0 и -0, что явно неверно.
Чтобы решить задачу о том, что сложение положительного и отрицательного равно 0, предки снова находятся в原码придуман на основе反码
Обратный код положительного числа остается таким же, как исходный код,反码Метод представления фактически используется для работы с отрицательными числами, то есть, за исключением того, что бит знака остается неизменным, все остальные позиции инвертируются и сохраняются, 0 сохраняется как 1, а 1 сохраняется как 0.
Тогда давайте посмотрим
Как и выше, диапазон хранения значений 4-битного дополнительного кода также-7 ~ +7
когда原码стал反码, мы видим добавление (+1) и (-1) раньше, оно становится0001 + 1110 = 1111, результат сложения сравнивается с обратной кодовой таблицей, 1111 равен -0, что прекрасно решает проблему, что сложение положительного и отрицательного равно 0
Однако, если использовать反码Есть еще проблема хранения числовых значений, то есть два одинаковых значения (+0) и (-0) имеют два разных бинарных выражения
Поэтому для решения этой проблемы предки предложили补码концепция, а также для负数на переработку, то есть с оригинала反码На основании добавления нового кода 1
Как показано на рисунке выше, обработка反码Когда -0 в , добавьте 1 к 1111, и получится 10000. Поскольку мы храним в 4 битах, нам нужно отбросить самый левый старший бит бита знака, который находится в бите переноса. Он становится 0000, который точно равен 0 положительного числа слева
Отлично решает проблему (+0) и (-0) одновременно
Мы смотрим на таблицу дополнений, потому что дополнение -0 равно0000Эквивалентно +0, поскольку дополняет 1, мы обнаруживаем, что -0 не имеет значения, поэтому удалим число -0.
Давайте посмотрим на отрицательное дополнение до 7, то есть двоичное выражение после добавления 1 к дополнению до единицы:1001, в 4-битной памяти находим таблицу дополнений1001Может быть и меньше, т.1000Это -8, как показано ниже
Поэтому в конце дополнения добавляется -8, то есть диапазон выражения значения дополнения в 4-битной памяти равен-8 ~ +7
При этом мы используем补码При , задача о том, что сложение положительного и отрицательного равно 0, также может быть решена
пример:
Складываем (+4) и (-4), 0100+1100=10000, есть перенос, и отбрасывается старший бит, который равен 0000(0)
Затем мы можем отсортировать и обобщить исходный код, обратный код и дополнительный код.
исходный код
Исходный код на самом деле представляет собой бит знака, добавленный перед значением (то есть старший бит — это бит знака), а бит знака равен 0, когда число положительное.
Когда число отрицательное, бит знака равен 1 (0 имеет два представления: +0 и -0), а остальные биты указывают размер значения.
пример:
На этот раз мы используем 8-битный (битовый) двоичный код для представления числа, тогда исходный код положительной 5 равен0000 0101, исходный код минус 51000 0101, разница только в знаковом бите
дополнение
Обратный код положительного числа совпадает с его первоначальным кодом.
Инверсный код отрицательного числа — это инверсия исходного кода, за исключением знакового бита.
пример:
Используйте 12-битный (битовый) двоичный код для представления значения, тогда дополнение положительных 5 эквивалентно исходному коду.0000 0000 0101, бит знака отрицательного числа 5 равен 1, а инверсия остатка равна1111 1111 1010
дополнять
Дополнение положительного числа совпадает с его первоначальным кодом.
Дополнение отрицательного числа состоит в добавлении 1 к последней цифре его обратного кода и удалении старшего переноса.
пример:
Используя 32-битный (битовый) двоичный код для представления, положительное дополнение до 5 эквивалентно исходному коду.0000 0000 0000 0000 0000 0000 0000 0101, дополнение отрицательного числа 5 добавляется в конец дополнения, а старший перенос удаляется.Поскольку дополнение отрицательного числа 5 добавляется к 1, переноса нет, т. е.1111 1111 1111 1111 1111 1111 1111 1011
Найдите исходный код по дополнению
После того, как мы познакомились с понятиями исходного кода, обратного кода и дополнительного кода, приведенными выше, мы должны были понять процесс преобразования исходного кода в обратный код.Однако, если известен дополнительный код числа, как насчет операции нахождения? исходный код?
Фактически операция получения исходного кода из известного дополнения состоит в получении дополнения к дополнению.
Если знаковый бит дополнения равен 0, что означает, что это положительное число, то его исходный код является его дополнением.
Если знаковый бит дополнения равен 1, что означает, что это отрицательное число, то снова непосредственно вычислить дополнение.Его дополнение является исходным кодом.
пример:
найти дополнение1001То есть исходный код десятичного числа -7
Мы берем дополнение, а затем дополнение, то есть сначала отрицаем, а затем дополняем 1 , отрицаем, чтобы получить1110, восполнить это1111, мы сравниваем исходный код -7 выше, это1111
Двоичный файл хранится в памяти в дополнении до двух
Как было сказано выше, окончательный вывод я вам скажу на этот раз.Двоичные числа наконец-то хранятся в виде дополнения в памяти.Теперь вы знаете, почему они хранятся в дополнении.Дошли ли вы до GET?
Используя дополнение, мы можем легко преобразовать операцию вычитания в операцию сложения, и процесс операции упрощается.Дополнение положительного числа является истинным значением числа, которое оно представляет, а значение дополнения отрицательного числа равно не это.Истинное значение представленного числа вычисляется с использованием дополнения, и результат все еще является дополнением.
В отличие от исходного кода и обратного кода, для значения 0 существует только один дополнительный код. Например, это 0000.
Опять же, разница между 32-битным, 12-битным, 8-битным и 4-битным и т. д. заключается в диапазоне хранимых значений, точно так же, как допустимый диапазон значений 8-битного хранилища исходного кода и дополнительного кода.-127 ~ +127, диапазон дополнения-128 ~ +127, а 4-битный исходный и дополнительный диапазон равны-7 ~ +7, диапазон дополнения-8 ~ +7, теперь вы, наверное, понимаете, почему в JS есть понятие старших и младших значащих цифр
Конечно, сейчас мы рассматриваем только целые числа, а не десятичные дроби, чтобы облегчить наше понимание исходного кода, обратного кода и дополнительного кода, а затем мы поговорим о
Хранение чисел в JavaScript
JavaScriptне является типизированным языком, в отличие от многих других языков программирования,JavaScriptНет различных типов чисел, таких как целые, короткие, длинные, числа с плавающей запятой и т. д.
существуетJavaScriptВ , числа не делятся на целые и типы с плавающей запятой, то есть все числа хранятся с использованием типов с плавающей запятой, которые используютIEEE 754Стандартный 64-битный формат с плавающей запятой представляет числа, как показано ниже.
-
63-й бит — это знаковый бит S (знак)
-
52-62 бита или 11-битный код экспоненты E (смещение экспоненты)
-
От 0 до 51 бит — это 52-битная мантисса M (мантисса)
Бит знака также указан выше, указывая положительный и отрицательный, 0 положительный, 1 отрицательный
Мы немного лучше понимаем знак, так что же такое мантисса и что такое показатель степени?
что такое мантисса
Для удобства пояснения непосредственно на примере видим мантиссу десятичного числа 5.2
Во-первых, мы преобразуем его целую часть и дробную часть в двоичную по очереди, но повторяем этот процесс много раз, и результат выглядит следующим образом.
101.00110011... // 小数部分 0011 无限循环
На самом деле существует много способов представления числа с плавающей запятой, но в спецификации обычно используется экспоненциальное представление, как и выше.101.00110011..., мы будем использовать1.0100110011.. * 2^2Такой способ выражения только одного целого числа мы называем нормализацией.
В двоичном формате есть только 0 и 1. Согласно научной записи, кроме числа 0, первая позиция всех нормализованных чисел может быть только 1. Для этого IEEE 754 прямо опускает эту дефолтную 1, чтобы увеличить диапазон хранимых значений, так что эффективная мантисса на самом деле есть52 + 1 = 53кусочек
Как было сказано выше, мантисса выражает дробную часть числа, то есть двоичное значение.1.0100110011.. * 2^2Мантисса0100110011..., потому что это десятичное число с бесконечным циклом, поэтому мы можем взять максимум 52, а остальные будут усечены, что вызовет некоторую потерю точности, поэтому в JS0.1 + 0.2 != 0.3Причина, если мантисса меньше 52 бит, просто добавляем после нее 0
Мы можем задаться вопросом, почему числа, отличные от 0, преобразуются в двоичные с первой единицей, например0.0101это0 < 值 < 1Разве это не первый двоичный десятичный разряд 0, мы сказали, что после нормализации двоичный десятичный0.0101После нормализации1.01 * 2^-2, поэтому отсутствие ведущей 1 не сбивает с толку
что такое код
Во-первых, нам нужно знать
показатель степени = истинное значение показателя степени + смещение 1023, смещение =2^(k-1)-1, k – количество цифр кода заказа
Истинное значение показателя степени представляет собой двоичное представление истинного значения показателя степени в экспоненциальном представлении, которое указывает положение десятичной точки в мантиссе.
Так зачем добавлять истинное значение показателя степени и смещение, чтобы получить показатель степени?
Простое понимание, истинное значение показателя степени - это двоичное значение в фактическом показателе степени, а показатель степени - это двоичное значение, сохраненное после смещения показателя степени.
Также возьмите приведенное выше значение 5.2 в качестве примера, его нормализованное двоичное значение1.0100110011.. * 2^2, 2 во 2-й степени, то есть его истинное значение порядкового кода равно 2, затем добавьте смещение 1023, то есть 1025, и 11-битный порядковый код после двоичного преобразования будет10000000001
Так зачем зачет?
Почему показатель степени по смещению 1023?
На этом этапе вам может быть более любопытно, почему код заказа имеет понятие смещения, давайте выведем его снова.
11-битный код заказа, то диапазон двоичных значений, которые может хранить код заказа, составляет от 0 до 2047, за исключением двух денормализованных случаев 0 и 2047 (денормализация будет описана ниже), он становится от 1 до 2046, что относится к положительному числа. , так как все еще есть отрицательные числа, диапазон экспоненты составляет от -1022 до 1023. Если нет смещения, экспоненту необходимо ввести бит знака. Поскольку есть отрицательные числа, необходимо ввести дополнительный код, который несомненно усложнит вычисление.Чтобы упростить операцию, используйте только код беззнаковой экспоненты и введите понятие смещения
Порядок E в разных случаях
Мы упомянули концепции нормализации и денормализации выше, так что же это такое?
Нормализованная ситуация на самом деле является общей ситуацией, о которой мы упоминали выше, потому что код заказа не может быть 0 или 2047, поэтому показатель степени не может быть -1023 и не будет 1024. Только в этом случае мантисса будет иметь неявный бит 1, а именно тот, который игнорируется по умолчанию, следующим образом
S + (E!=0 && E!=2047) + 1.M
Тогда денормализация является особым случаем, когда показатель степени равен 0, а показатель степени равен -1023.Если мантисса полностью равна 0, число с плавающей запятой представляет положительный или отрицательный 0, в противном случае оно представляет те числа, которые очень близки к 0,0, следующим образом
S + 00000000000 + M
Денормализация означает, что код экспоненты равен 0, а это означает, что есть еще один случай, когда код экспоненты равен 1, а показатель степени равен 1024. В этом случае, если мантисса полностью равна 0, это бесконечность. не равно 0 , это то, что мы часто называем NaN
无穷大:S + 111 11111111 + 00000000...
NaN:S + 111 11111111 + (M!=0)
тест один
Возможно, вы все еще немного запутались, лучше еще раз взглянуть на это, затем сделать перерыв, давайте проведем небольшой тест, посчитаем двоичное представление десятичного числа -15,125 в памяти JS и попробуем. , Посмотрите на ответ, когда закончите
|
|
Вы видели это, пошевелите руками и поставьте лайк 😄
|
|
Как и выше, найдите двоичный код десятичного числа -15.125 в памяти JS.
Во-первых, поскольку это отрицательное число, знак равен 1.
Далее преобразуем целую часть 15 и дробную часть 0,125 от 15,125 в двоичную соответственно.Процесс вычисления не описывается.Целое число делится на 2 и остаток располагается в обратном порядке, а десятичная дробь умноженная на 2 оформляется в целое заказ.1111.001
Нормализованные результаты в соответствии с Законом о науке и технике:1.111001 * 2^3
Далее вычисляем код заказа, 3 (истинное значение кода заказа) + 1023 (смещение) = 1026
Преобразование 1026 в 11-битный двоичный код100 0000 0010, который является кодом заказа
Мантисса — это нормализованное число результата минус дробная часть целого числа 1.1110 01, если он меньше 52 цифр, добавьте 0, и результат мантиссы будет1110 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Наконец, сращивание
符号位 + 阶码 + 尾数
1 10000000010 1110010000000000000000000000000000000000000000000000
Диапазон номеров в JS
Если вы действительно понимаете вышеизложенное, то обнаружите, что диапазон чисел на самом деле имеет два понятия: наибольшее положительное число и наименьшее отрицательное число, наименьшее положительное число и наибольшее отрицательное число.
И окончательный диапазон чисел最小负数~最大负数и дальше最小正数~最大正数
Из трех измерений S, E, M, а именно знака числа, кода заказа и мантиссы, S представляет положительное и отрицательное значение, а значение кода заказа E намного больше, чем количество мантиссы M, поэтому код заказа E определяет размер, а мантисса M определяет точность
Итак, начнем с кода заказа Е.
При нормализации, когда E является максимальным значением, 2046 (максимальный показатель) - 1023 (смещение) = 1023 (истинный показатель), а именно011 11111111
Из показателя степени, полученного из максимального значения порядка E (истинное значение порядка), диапазон значений, который мы можем получить, равен-2^1023 ~ 2^1023, используя индексную функцию JSMath.pow(2,1023)Результат8.98846567431158e+307, то если мантисса1.11111111..., то оно бесконечно близко к 2, мы не так точны, просто используем8.98846567431158 x 2В сочетании с исходным показателем степени это примерно равно1.797693134862316e+308
Помните, что мы использовали константы JSNumber.MAX_VALUEПолучилось ли максимальное цифровое значение?Его можно теперь вывести на консоль,т.е.1.7976931348623157e+308, что очень близко к значению, которое мы оценили (потому что мы рассчитали нормализованное число, приблизительно равное 2 для простоты, а вычисленное значение на самом деле немного больше)
Таким образом, максимальные положительные и минимальные отрицательные диапазоны для чисел следующие:
1.7976931348623157e+308 ~ -1.7976931348623157e+308
Если оно превышает это значение, число слишком велико и переполняется, что будет отображаться в JS.Infinityили-Infinity, а именно бесконечности и бесконечности, научное название называется прямое переполнение.
Выше приведено при нормализации, затем при денормализации, то есть индекс 0 (код минимального заказа) - 1023 (смещение) = - 1023, то есть10000000001
Из показателя степени можно сделать вывод, что минимальное значение равно2^-1023, когда если мантисса0.00000...001
То есть, когда мантисса не равна 0, 52-битная мантисса эквивалентна десятичной запятой и может быть виртуализирована для перемещения 51 вправо, чтобы можно было получить меньшее значение.2^-51поэтому минимальное значение2^-1074, давайте посчитаемMath.pow(2,-1074)Результат примерно равен5e-324
в то время как константа минимального значения JSNumber.MIN_VALUEПолученное значение равно5e-324
Таким образом, минимальный положительный и максимальный отрицательный диапазоны чисел следующие:
5e-324 ~ -5e-324
Если сохраняется значение, которое меньше минимального представимого числа, оно будет отображаться как 0, а научное имя будет переполнено в обратном порядке.
Диапазон целых чисел в JS
В отличие от размера числа, числа могут иметь десятичные дроби, но целые числа — это просто целые числа.
Мы анализируем от мантиссы M, точность не более 53 бит (включая нормализованный неявный бит 1), диапазон точных целых чисел фактически является максимальным значением M, то есть1.11111111...111, то есть,2^53-1, используя JS-функцииMath.pow(2,53)-1Рассчитать числа9007199254740991
Таким образом, диапазон целых чисел на самом деле
-9007199254740991 ~ 9007199254740991
Мы также можем использовать внутренние константы JS, чтобы получить следующие самые большие и самые маленькие безопасные целые числа.
Number.MIN_SAFE_INTEGER // -9007199254740991
Number.MAX_SAFE_INTEGER // 9007199254740991
именно то, что мы хотим
тогда мы говорим, что целое число является безопасным целым числом, если оно находится в этом диапазоне
Независимо от того, является ли целое число безопасным целым числом, можно использовать встроенные методы JS.Number.isSafeInteger()проверять
наконец
В процессе разработки есть много расчетов, которые нашли диапазон безопасности.В настоящее время мы должны преобразовать в строковые вычисления.Конечно, если мы не хотим делать это сами, мы также можем использовать библиотеки с открытым исходным кодом для рассчитать, напримерbignumber.js,Math.jsтак далее
Спасибо за чтение.Причина, по которой эта статья была остановлена, когда я впервые написал ее, заключалась в том, что она сделала двоичный код немного запутанным, поэтому, если вы не понимаете его, вы можете прочитать больше, не расстраивайтесь, если эта статья описываетЕсли это не подходит, вы также можете прочитать статью по ссылке в конце следующей статьи, чтобы помочь понять.Если это не так, пожалуйста, укажите это, спасибо
Также приглашаем обратить внимание на публичный аккаунт "Нерегулярный интерфейс", давайте три ссылки, спасибо
более захватывающийGitHub.com/is boy JC/no...
Справочная статья
Связь между исходным кодом, обратным кодом и дополнительным кодом
[Алгоритм] Как числа с плавающей запятой хранятся в памяти
0,1+0,2 не равно 0,3? Почему в JavaScript такая «дерзкая» операция?