688^79 mod 3337 = 1570.
Когато опитах това във wolfram alpha, получих:
но когато въведох същото в Matlab, получавам 364 като отговор. Трябва да правя нещо нередно.
Всяка светлина върху това ще бъде оценена.
688^79 mod 3337 = 1570.
Когато опитах това във wolfram alpha, получих:
но когато въведох същото в Matlab, получавам 364 като отговор. Трябва да правя нещо нередно.
Всяка светлина върху това ще бъде оценена.
Причината е, че Matlab използва double
аритметика с плаваща запетая по подразбиране. Число толкова голямо, колкото 688^79, не може да бъде представено точно като double
. (Най-голямото цяло число, което може да бъде точно представено като double
, е от от порядъка на 2^53).
За да получите правилния резултат, можете да използвате символни променливи, което гарантира, че няма да загубите точността:
>> x = sym('688^79');
>> y = sym('3337');
>> mod(x, y)
ans =
1570
vpa
означава, че имате краен, но регулируем брой цифри на точност. Може би не разбирам какво се опитвате да кажете – вие не губите точност по отношение на зададената от вас стойност за digits
, но в manu случаи можете абсолютно да загубите точност спрямо истинската стойност, използвайки vpa
.
- person horchler; 27.04.2015
79^-1 mod 3220
(тълкува се като PowerMod[79,-1,3220]
, но ще реши проблемът със стандартния остатък за 1/79 mod 3220
(интерпретиран като Mod[79^-1,3220]
).
- person TroyHaskin; 27.04.2015
vpa
, но обяснението беше грешно. Благодаря! Коригирах го
- person Luis Mendo; 27.04.2015
Моят калкулатор ми изпраща същия отговор като Wolfram, той също така изчисли стойността за 688^79, така че съм склонен да повярвам, че Wolfram е прав. Вероятно сте превишили капацитета на Matlab с такъв огромен брой и затова не е изпратил правилния отговор.
mod(double(688^79), 3337)
- person codingEnthusiast   schedule 27.04.2015sym
и ще можете да го изчислите правилно. - person codingEnthusiast   schedule 27.04.2015