2017-08-07 7 views
2

Ich habe versucht, den größten Wert x für 2^(- x) = Realmin in Matlab durch den Ausdruck -log2 (realmin) zu finden. Das Ergebnis ist 1022. Wenn ich jedoch den Code 2^(- x)> 0 für x im Bereich von 1023 bis 1074 versuche, ist das Ergebnis 1 (True). Nach meinem Verständnis ist Realmin die kleinste positive Fließkommazahl. Was ist der Grund dafür, dass -log2 (realmin) nicht das größte x liefert, so dass 2^(- x)> 0?2^(- x) = Realmin in Matlab

+1

Ich kenne MatLab nicht, aber ich denke, es ist die kleinste positive ** normalisierte ** FP-Nummer. Denormale (weniger genau) können kleiner sein. Siehe https://en.wikipedia.org/wiki/Denormal_number –

Antwort

3

Wie im vorherigen Kommentar erwähnt, gibt die Realmin-Funktion die kleinste normalisierte Zahl zurück.

%% Script to check the smallest possible power of two in Matlab 

power = 0; 

while 2^power > 0 
    power = power - 1; 
end 

sprintf('%d', power) 

, dass Ihre erste Option ist: - (1075), während normalisierte Zahlen verwenden, wie ich die folgende sehr einfache Skript fand heraus, Sie können bis zu 2^gehen. Sie könnten auch eps(0) verwenden, um die kleinste normalisierte Zahl in Matlab zu bekommen, und Sie erhalten würden:

Trial>> log2(eps(0)) 

ans = 

     -1074 

Was ist richtig.

Sie sollten die Wikipedia-Seite über denormalisierte/normalisierte Zahlen für weitere Informationen lesen.