Plik:Log by aliasing to int.svg

Rozmiar pierwotny(Plik SVG, nominalnie 640 × 480 pikseli, rozmiar pliku: 13 KB)

Opis

Opis
English: Aliasing a positive IEEE-754 floating point number x to an integer Ix (like in C: float x = ...; int32_t i = * (int32_t *) &x;) yields a scaled and shifted approximation of its base-2 logarithm. This is the basis of the fast inverse square root algorithm.
Français : Si un nombre positif x représenté en virgule flottante au format IEEE 754 est interprété comme un entier Ix (comme en C : float x = ...; int32_t i = * (int32_t *) &x;) cela produit, à une transformation linéaire près, une approximation de son logarithme en base 2. Cette approximation est le fondement de l'algorithme de racine carrée inverse rapide.
Data
Źródło Praca własna
Autor Edgar Bonet
 
Ta ^specifik^ z W3C grafika wektorowa została stworzona za pomocą Gnuplot.

Gnuplot source

Warning: This source contains non-ASCII characters in label 3, in the title of the first curve and in comments.

#!/usr/bin/gnuplot

# Aliasing a float32 to an int32 yields an approximation of its base-2
# logarithm.

# Parameters for IEEE-754 single-precision floats
L = 2**23   # mantissa scaling factor
B = 127     # exponent bias

# For m ∈ [0, 1), log₂(1 + m) ≈ 1 + σ
sigma = 0.0430357

# Assume x is a positive normal float32.
# Compute I(x): the int32 aliased to x.
log_of_2 = log(2)
log2(x) = log(x) / log_of_2
round(x) = floor(x + 0.5)
e(x) = floor(log2(x))               # exponent
m(x, e_x) = x / 2**e_x - 1          # mantissa, without the leading 1
M(x, e_x) = round(m(x, e_x) * L)    # scaled and rounded mantissa
I2(x, e_x) = (e_x + B) * L + M(x, e_x)
I(x) = I2(x, e(x))

# Best fit to a logarithm
scaled_log(x) = L * log2(x) + L * (B - sigma)

# Do the plot
set terminal svg size 640, 480 enhanced
set output 'Log_by_aliasing_to_int.svg'
set xrange [0:10]
set yrange [0x3d800000:]
set format y "0x%x"
set ytics L
set key top left Left reverse invert spacing 1.4
set samples 200
set style line 1 lw 3 lc rgb "gray80"
set style line 2 lw 1 lc rgb "blue"
set style increment user
set label 1 "L = 2^{23}"    at 6, 0x3fc00000
set label 2 "B = 127"       at 6, 0x3f600000
set label 3 "σ = 0.0430357" at 6, 0x3f000000
plot scaled_log(x) title "L log_2(x) + L (B − σ)", \
     I(x) title 'I_x' lt 3

Licencja

Ja, właściciel praw autorskich do tego dzieła, udostępniam je na poniższej licencji
w:pl:Licencje Creative Commons
uznanie autorstwa na tych samych warunkach
Wolno:
  • dzielić się – kopiować, rozpowszechniać, odtwarzać i wykonywać utwór
  • modyfikować – tworzyć utwory zależne
Na następujących warunkach:
  • uznanie autorstwa – musisz określić autorstwo utworu, podać link do licencji, a także wskazać czy utwór został zmieniony. Możesz to zrobić w każdy rozsądny sposób, o ile nie będzie to sugerować, że licencjodawca popiera Ciebie lub Twoje użycie utworu.
  • na tych samych warunkach – Jeśli zmienia się lub przekształca niniejszy utwór, lub tworzy inny na jego podstawie, można rozpowszechniać powstały w ten sposób nowy utwór tylko na podstawie tej samej lub podobnej licencji.

Podpisy

Dodaj jednolinijkowe objaśnienie tego, co ten plik pokazuje

Obiekty przedstawione na tym zdjęciu

przedstawia

image/svg+xml

Historia pliku

Kliknij na datę/czas, aby zobaczyć, jak plik wyglądał w tym czasie.

Data i czasMiniaturaWymiaryUżytkownikOpis
aktualny13:20, 25 lip 2014Miniatura wersji z 13:20, 25 lip 2014640 × 480 (13 KB)Edgar.bonetUser created page with UploadWizard

Poniższa strona korzysta z tego pliku:

Globalne wykorzystanie pliku

Ten plik jest wykorzystywany także w innych projektach wiki:

Metadane