eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'Integer::ModuloNumber':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: ModuloNumber (private in Integer

This class is only visible from within Integer.

Inheritance:

   Object
   |
   +--Integer::ModuloNumber

Package:
stx:libbasic
Category:
Magnitude-Numbers
Owner:
Integer
Author:
Stefan Vogel

Description:


This is a helper class to perform fast computation of the modulus.
(with big numbers, this does make a difference)

WARNING: this does only work with numbers which have no common
         divisor (which is true for cryptographic applications).
         So, use this only if you know what you are doing ...



[instance variables:]
    modulus       the modulus
    reciprocal    reciprocal of the modulus
    shift         shift count to cut off some bits


Related information:

    Integer
    SmallInteger
    LargeInsteger

Class protocol:

instance creation
o  modulus: anInteger


Instance protocol:

accessing
o  modulus
return the modulus

o  modulus: n
set the modulus

arithmetic
o  modulusOf: dividend
compute the aNumber modulo myself.
The shortcut works only, if dividend is < modulo * modulo
(When doing arithmethic modulo something).
Otherwise do it the long way

usage example(s):

fast (using moduloNumber with almost same-sized dividend and divisor):
     |m|

     m := self new modulus:123456789901398721398721931729371293712943794254034548369328469438562948623498659238469234659823469823658423659823658.
     Time millisecondsToRun:[
        100000 timesRepeat:[
            m modulusOf:874928459437598375937451931729371293712943794254034548369328469438562948623498659238469234659823469823658423659823658.
        ]
    ].

10730930127807326146398409623772237722337234475792709784029183368622308259008044569184592041059181058049458041058052 

converting
o  asInteger
return the modulus

o  asModuloNumber


Examples:


        17 asModuloNumber modulusOf:38
        38 \\ 17


ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Wed, 10 Aug 2022 11:59:09 GMT