Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 Re: Calc » pokusy a chyby s operatorem Modulo - VYŘEŠENO » 10. 11. 2015 23:17:03

Tak tohle je geniální a funkční smile
děkuju

LADER napsal(a)

Zkus makro:

Function BigMod(A As Long, B As Long, C As Long) As Long
    Dim X As Long
    X = A mod C
    While B > 1 
        X = ((A mod C) * X) mod C
        B = B - 1
    Wend
    BigMod = X
End Function

Zavoláš jej =BigMod(A;B;C) místo =mod(A^B;C)

#2 Re: Calc » pokusy a chyby s operatorem Modulo - VYŘEŠENO » 10. 11. 2015 13:46:05

Tak co se tyce calcu a zminene problematice, tak tato astronomicka cisla zkousim uplne poprve a az diky vam jsem se dozvedel o nejakych 16bit limitech ciselne presnosti. Proto diky všem za info a pomoc.


PS: neni vam znamo zda existuje nejake rozsireni (extensions) ktere by snad tuto limitaci zvedalo?

#3 Calc » pokusy a chyby s operatorem Modulo - VYŘEŠENO » 9. 11. 2015 21:31:05

Drnda
Odpovědí: 7

Takže znovu a lépe smile
V diskusi pod článkem jsem uváděl ze se nemohu s funkcí MOD() modulo dobrat spravneho vysledku u diffie-hellman vzorce na vymenu klice, uvedl jsem ale omylem špatný příklad který nahodou calc vypočítal správně. Proto bych to rád napravil i s ukázkami a .ods souborem ke stažení

Jedná se LO Calc 5.0.3.2
tak například:
calc říka ze MOD(22^25;116) = 28, wolframalpha dá správný výsledek 64 http://www.wolframalpha.com/input/?i=22^25+modulo+116
calc říka ze MOD(22^30;116) = 16, wolframalpha dá správný výsledek 20 http://www.wolframalpha.com/input/?i=22^30+modulo+116


Podle informací od čtenáře "neutr" jsem na rozpacích jestli bych neměl sešit donutit přejít do nějakeho jiného režimu, ale nevím jak. Pro úplnost ještě nahraju i celý sešit, snad to nějak pomůže. Je sice zajímavé že jsou i případy kdy se společný D-H klíč vzácně shoduje jako např. když se použijí g=22, p=116, a=3, b=6. No a to je na tom to zajimave že mi není známo kde se ztrácí calc, nebo kde jsem to já kdo porušil nejaky maximálni rozsah nebo pravidlo calcu.


neutr napsal(a)

...
2. Číslo =82^7 (= 24928547056768) ještě spadá do rozsahu Long Integer. To znamená že je menší nežli =2^1024 (Od tohoto rozsahu -včetně- už počítač není schopen počítat. Vyhodí #NUM).

3. Výpočty probíhají pomocí lg - přirozeného logaritmu se základem "e" 2,71... což znamená, že zde vzniká nepřesnost v podílu. V sešitě je funkce LN() což je přirozený logaritmus. Jeho opakem je funkce EXP(). tato funkce pracuje s formátem čísla Double.
...

Zápatí

Používáme FluxBB