Leo Havmøller wrote:
> "Troels Thomsen" <troels.thomsen@mail.tele.dk> wrote in message
> news:3e799ddd$0$20488$edfadb0f@dread11.news.tele.dk...
>> Hej,
>>
>> Jeg sidder og kigger på en crc16 funktion som fungerer vha en tabel
>> med nogle magiske værdier.
>> Kan man (forholdsvis let) udregne disse, eller findes der en
>> algoritme der fungerer uden?
>>
>> Jeg har kigget på en md5sum også, som også var implementeret vha stor
> tabel.
>
>
http://www.ross.net/crc/
Med hensyn til MD5 er konstanterne i tabellen T udregnet således:
(define T
(let* ([precompute (lambda (i) (inexact->exact (floor (* 4294967296 (abs (sin i))))))]
[v (list->vector (map precompute (iota 1 64)))])
(lambda (i)
(vector-ref v (- i 1)))))
Altså
T(i) = floor( 4294967296 * abs( sin( i ) ) )
Se eventuelt de mange kommentarer i:
http://www.scheme.dk/md5/md5.html
Min implementation følger specifikationen nøje - i modsætning
til de optimerede versioner, man kan finde rundt omkring.
--
Jens Axel Søgaard