javascript — каков результат «x по модулю y»?
спросил
Изменено 9 лет, 4 месяца назад
Просмотрено 3к раз
Ссылка на спецификацию ECMAScript Раздел 5.2:
Запись «x по модулю y» (y должна быть конечной и отличной от нуля) вычисляет значение k того же знака, что и y (или ноль), такое что abs(k) < abs(y) и x−k = q × y для некоторого целого числа q.
поэтому, если y положителен, результат k ‘x по модулю y’ положителен независимо от знака x.
и, если я правильно понимаю, ToInt32(-1) равно ToInt32(1)?
- JavaScript
3
Обозначение x по модулю y
используется внутри спецификации для описания результата определенных операций.
k
из x по модулю y
(по определению) того же знака, что и и
. Не утверждается, что оператор %
эквивалентен по модулю
. Если вам интересно, актуальную спецификацию для %
можно найти в разделе 11.5.3. Интересно, что он не использует по модулю
.
9
Скопируйте вставку из моего предыдущего ответа здесь:
Возьмите % b
1. Когда оба +ve, Modulo и Remainder являются одним и тем же 2. Когда a есть -ve, они не совпадают
Например;
a = -10, b = 3
Остаток от -10 % 3 = -1
для модуля, прибавьте большее число, кратное 3, к вашему «a» и вычислите остаток.
-10 + 12 = 2
2 % 3 = 2 ваш ответ
Операция по модулю
определяется как математическая операция по модулю:
Математические операции, такие как сложение, вычитание, отрицание, умножение, деление и математические функции, определенные позже в этом пункте всегда следует понимать как вычисление точных математические результаты о математических действительных числах, которые не включать бесконечности и не включать отрицательный ноль, т. отличается от положительного нуля.
Ваш вопрос:
ToInt32(-1) равно ToInt32(1)
Ну, нет:
Пусть posInt будет знак(число) * этаж(абс(число)).
posInt = знак(-1) * пол(абс(-1)) = -1;
Пусть int32bit будет posInt по модулю 2 32 ; то есть конечное целое значение k числового типа с положительным знаком и менее 2 32 по величине, такой что математическая разница posInt и k математически целое кратное 2
32 .
int32bit = posInt mod 4294967296 = -1 mod 4294967296 = 4294967295
(альфа-ссылка на вольфрам для математического результата)
Если int32bit больше или равен 2 31 , вернуть int32bit — 2 32 , в противном случае вернуть int32bit.
Поскольку 4294967295 >= 2147483648
, мы возвращаем 4294967295 - 4294967296
, т. е. -1
.
Если мы проделаем те же шаги для ToInt32(1)
, получаем 1
. Так что у них не тот результат.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через FacebookЗарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Морфизмы кольцевых пространств и модулей — проект The Stacks
Теперь мы ввели достаточно обозначений, чтобы можно было определить обратный и прямой перенос модулей вдоль морфизма кольцеобразных пространств.