Этот глупый язык сценариев не имеет% или Mod(). У меня есть Fix(), который отбивает десятичную часть числа. Мне нужны только положительные результаты, поэтому не становитесь слишком надежными.Как мне сделать мод без оператора мод?
ответ
Будет
// mod = a % b
c = Fix(a/b)
mod = a - b * c
делать? Я предполагаю, что вы можете по крайней мере делить здесь. Все ставки отключены на отрицательных числах.
в зависимости от того, что вы хотите для отрицательных чисел, его можно настроить. существует 'fix()', который всегда обрезается и существует 'int()', который всегда округляется вниз ('int (-2.5) = - 3') –
Это не может работать для вас производительности мудрый, но:
while (num >= mod_limit)
num = num - mod_limit
a mod n = a - (n * Fix(a/n))
Какой язык это?
Основной алгоритм может быть:
hold the modulo in a variable (modulo);
hold the target number in a variable (target);
initialize modulus variable;
while (target > 0) {
if (target > modulo) {
target -= modulo;
}
else if(target < modulo) {
modulus = target;
break;
}
}
Я думаю, что есть ошибка для случая, когда 'target == modulo'. Бесконечная петля. –
Для потомков, BrightScript теперь имеет оператор по модулю, это выглядит следующим образом:
c = a mod b
Это не дает ответа на вопрос. –
@MDXF - он не дает ответа на * заголовок * вопроса, но материально ответы: если вы читаете тело, он говорит: «Этот глупый язык сценариев не имеет% или Mod()» - это был дело в 2010 году, но не более. –
В JavaScript:
function modulo(num1, num2) {
if (num2 === 0 || isNaN(num1) || isNaN(num2)) {
return NaN;
}
if (num1 === 0) {
return 0;
}
var remainderIsPositive = num1 >= 0;
num1 = Math.abs(num1);
num2 = Math.abs(num2);
while (num1 >= num2) {
num1 -= num2
}
return remainderIsPositive ? num1 : 0 - num1;
}
Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – kayess
Если кто-то прибывает позже, вот еще несколько актуальных алгоритмов (с ошибками ... читайте внимательно)
https://eprint.iacr.org/2014/755.pdf
Есть на самом деле два основных вида формул сокращения: Barett и Монтгомери. Бумага из Eprint повторе как в разных вариантах (алгоритмы 1-3) и дать «улучшенную» версию в алгоритме 4.
Обзор
теперь дать краткий обзор 4. Алгоритм:
1.) Вычислите «A * B» и сохраните весь продукт в «C», что C и модуль $ p $ - это вход для этого алгоритма.
2.) Вычислить длину бит $ p $, скажем: функция «Ширина (p)» возвращает именно это значение.
3.) Разделите входные $ C $ на N "блоки" размера "Ширина (p)" и сохраните каждый в G. Начните с G [0] = lsb (p) и закончите в G [N- 1] = msb (p). (Описание действительно неисправна бумаги)
4.) Запустить время цикла: Set N = N-1 (для достижения последнего элемента) предвычисления $ B: = 2^{Ширина (р)} \ bmod p $
while N>0 do:
T = G[N]
for(i=0; i<Width(p); i++) do: //Note: that counter doesn't matter, it limits the loop)
T = T << 1 //leftshift by 1 bit
while is_set(bit(T, Width(p))) do // (N+1)-th bit of T is 1
unset(bit(T, Width(p))) // unset the (N+1)-th bit of T (==0)
T += b
endwhile
endfor
G[N-1] += T
while is_set(bit(G[N-1], Width(p))) do
unset(bit(G[N-1], Width(p)))
G[N-1] += b
endwhile
N -= 1
endwhile
Это делает много. Не нужно только recursivly уменьшить G [0]:
while G[0] > p do
G[0] -= p
endwhile
return G[0]// = C mod p
Остальные три алгоритма хорошо определены, но не хватает какой-то информации или представить это на самом деле не так. Но он работает для любого размера;)
Hi @shalec - мы не поощряем ответы, содержащие только ссылки на внешние ресурсы. Эти [ссылки только ответы не приветствуются] (https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers). – Lix
Можете ли вы скопировать и вставить соответствующие части связанного PDF в свой ответ? Это значительно улучшит качество этой должности. –
Причина. Указано 4 алгоритма. Я отредактирую их. – Shalec
Не могли бы вы упомянуть и, возможно, отметить, какой «глупый» язык сценариев вы говорите? –
Я думаю, что это глупый язык под названием «домашняя работа» – Gareth
Хех.Это встроенный язык на этом видеоплеере Roku digital signage. У него, вероятно, есть Mod где-то, но я уверен, что не могу его найти, и он похож на Arctan() и NaturalLog(), поэтому я действительно запутался в том, как они пропустили Mod. – tladuke