Ten głupi język skryptowy nie ma wartości% ani Mod(). Mam Fix(), który odciąga część dziesiętną liczby. Potrzebuję tylko pozytywnych wyników, więc nie bądź zbyt solidny.Jak mogę zrobić mod bez operatora mod?
Odpowiedz
Will
// mod = a % b
c = Fix(a/b)
mod = a - b * c
zrobić? Zakładam, że możesz tu przynajmniej podzielić. Wszystkie zakłady są wyłączone na liczbach ujemnych.
w zależności od tego, co chcesz dla liczb ujemnych, można go dostosować. istnieje 'fix()', które zawsze obcina i jest 'int()', które zawsze zaokrągla w dół ('int (-2,5) = - 3') –
ta może nie działać dla ciebie wydajności mądry, ale:
while (num >= mod_limit)
num = num - mod_limit
a mod n = a - (n * Fix(a/n))
Co to jest język?
Podstawowy algorytm może być:
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;
}
}
Myślę, że wystąpił błąd w przypadku, gdy 'target == modulo'. Nieskończona pętla. –
dla potomności, BrightScript ma teraz operator modulo, wygląda to tak:
c = a mod b
Nie zapewnia to odpowiedzi na pytanie. –
@MDXF - nie zapewnia odpowiedzi na * tytuł * pytania, ale istotna odpowiedź brzmi: jeśli czytasz ciało, mówi: "Ten głupi język skryptowy nie ma% ani Mod()" - to był sprawa na rok 2010, ale nie więcej. –
w 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;
}
Chociaż ten fragment kodu może rozwiązać pytanie, [w tym wyjaśnienie] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) naprawdę pomaga poprawić jakość twojego posta. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. Proszę również starać się nie tłumić kodu za pomocą komentarzy wyjaśniających, co zmniejsza czytelność zarówno kodu, jak i objaśnień! – kayess
Jeśli Ktoś przyjedzie później, oto kilka bardziej aktualnych algorytmów (z błędami ... przeczytaj uważnie)
https://eprint.iacr.org/2014/755.pdf
Są faktycznie dwa główne rodzaj wzorów redukcyjnych: Barett i Montgomery. W pracy z ePrint powtarzać zarówno w różnych wersjach (algorytmy 1-3) i dać „ulepszoną” wersję algorytmu 4.
Przegląd
daję teraz przegląd Algorytm 4.:
1.) Oblicz "A * B" i zapisz cały produkt w "C", w którym C i moduł $ p $ jest wejściem dla tego algorytmu.
2.) Oblicz bitową długość $ p $, na przykład: funkcja "Szerokość (p)" zwraca dokładnie tę wartość.
3.) Podziel dane wejściowe $ C $ na N "bloków" o wielkości "Szerokość (p)" i zapisz każdą z nich w G. Rozpocznij w G [0] = lsb (p) i zakończ w G [N- 1] = msb (p). (Opis jest rzeczywiście wadliwy papieru)
4.) Start pętli, przy czym: ustawia się N = N-1 (osiągnąć ostatni element) wstępnego wyliczenia $ B: = 2^{szerokość (t)} \ 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
To dużo. Nie musimy tylko recursivly zmniejszyć G [0]:
while G[0] > p do
G[0] -= p
endwhile
return G[0]// = C mod p
Pozostałe trzy algorytmy są dobrze zdefiniowane, ale brakuje pewnych informacji lub przedstawienia to naprawdę źle. Ale działa na dowolny rozmiar;)
Hi @shalec - nie zachęcamy do odpowiedzi, które zawierają tylko linki do zewnętrznych zasobów. Te [odsyłające tylko do linków odpowiedzi są odradzane] (https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers). – Lix
Czy możesz skopiować i wkleić odpowiednie części połączonego pliku PDF do swojej odpowiedzi? To znacznie poprawiłoby jakość tego postu. –
Przyczyna. Wspomniano o 4 algorytmach. Będę edytować te. – Shalec
Czy mógłbyś wspomnieć, a może oznaczyć, który "głupi" język skryptowy, o którym mówisz? –
Myślę, że to głupi język o nazwie "praca domowa" – Gareth
Heh.To jest trochę osadzonego języka na tym odtwarzaczu wideo z cyfrowym signage Roku. Prawdopodobnie ma jakiś Mod gdzieś, ale na pewno go nie znajduję i ma jak Arctan() i NaturalLog(), więc jestem bardzo zdezorientowany, jak pomijali Mod. – tladuke