Costante algoritmo TEA 0x9e3779b9 detta derivata dalla sezione aurea, ma il numero dorato è 1.618?

6

Sto cercando di capire una costante 0x9e3779b9.

Che tipo di dati è questo? Non è binario, non decimale, che cos'è questo?

È una costante utilizzata nell'algoritmo TEA. Dice che è derivato dal numero dorato , ma il numero d'oro è 1.618?

    
posta pandr01d 30.03.2011 - 15:13
fonte

4 risposte

11

Come altri hanno già detto, la costante è un numero intero in forma esadecimale. In particolare, è un numero intero a 32 bit in forma esadecimale. Se la costante è un intero con segno, 0x9e3779b9 è decimale 1640531527 negativo nella forma a complemento a due; pertanto, può essere una frazione intera ridimensionata che è stata adattata per gestire non-integrale di 2 problemi correlati.

Conversione da negativo a positivo del complemento a due in esadecimale

0x9e3779b9 ⊕ 0xffffffff + 0x00000001 = 0x61C88647 = 1640531527 in decimal

o usando l'operatore complemento 1 di ~ nella famiglia di lingue C

~0x9e3779b9 + 0x00000001 = 0x61C88647 = 1640531527 in decimal 

La conversione da negativo a positivo del complemento a due in binario

10011110001101110111100110111001 ⊕ 11111111111111111111111111111111 + 00000000000000000000000000000001 =  01100001110010001000011001000111 = 1640531527 in decimal
    
risposta data 30.03.2011 - 16:08
fonte
32

Penso che questa domanda StackOverflow risponda:

link

Essenzialmente, si tratta di un numero magico, derivato dal numero irrazionale del Golden Ratio, che utilizza i passaggi:

  1. phi = (1 + sqrt(5)) / 2 = 1,6180339887498948482045868343656 .

  2. Successivamente, viene calcolato 2^32 / phi che risulta in 2 654 435 769,4972302964775847707926 .

  3. Tronca di avere solo la sua parte intera 2 654 435 769

  4. Converti in esadecimale e otterrete 9E37 79B9 (In Windows calcolatrice scegliere Qword )

Essendo esso un intero pre-calcolata, al posto di un prendere un galleggiante ogni tempo e fare il calcolo, si accelera il calcolo di ogni hash fatto dopo.

La notazione 0x è un numero esadecimale , o base 16. Il vantaggio di una base 16 numero è che ogni coppia di cifre rappresenta esattamente un byte. Dato un po 'di pratica, puoi quasi vedere la sequenza di bit nella tua mente, supponendo che tu abbia mai lavorato con i numeri binari.

    
risposta data 30.03.2011 - 15:29
fonte
2

Il numero deriva dalla rappresentazione esadecimale del rapporto aureo.

Proprio come 1/4 è 0.25 ( 25/100 ) in decimale è 0.4 ( 4/16 ) in esadecimale, la parte frazionaria del rapporto aureo ha una rappresentazione diversa in esagono che in decimale.

Non stai dividendo 0x9e3779b9 per 10^8 , ma 16^8 (o 2/32 ) e 0x9e3779b9/0x100000000 = 2654435769/4294967296 ≈ 0.6180339886

    
risposta data 05.07.2015 - 11:05
fonte
0

Come altri hanno sottolineato qui e su link , il numero è effettivamente costruito da la sezione aurea.

Ma c'è un altro motivo importante per cui perché numeri come pi, phi o e sono usati in funzioni crittografiche. Naturalmente, in linea di principio, qualsiasi sequenza di bit "ragionevolmente casuale" potrebbe essere utilizzata come costante. Ma mette il creatore della funzione sotto sospetto di avere ingegnerizzato il valore, ad es. per creare una particolare debolezza nell'algoritmo (noto solo a lui) che può quindi sfruttare quando si utilizza la sua funzione.

Costruendo il valore da costanti "naturali" ben conosciute, questo tipo di sospetto può essere evitato in una certa misura.

    
risposta data 21.07.2015 - 22:34
fonte

Leggi altre domande sui tag