2010-11-27 11 views
5

Mit vier Vars:Wie wird eine korrekte Größenprüfung durchgeführt?

short mantissa, 
exponent, 
base; 
long double factor; 

Wie soll ich jede dieser drei Komponenten überprüfen, dieses Ergebnis, um sicherzustellen, wird in Faktor passen? Oder überlassen Sie es vielleicht als Benutzerverantwortung sicherzustellen, dass die bereitgestellten Daten sinnvoll sind?

+0

Warte, meinst du Fit wie in dem Sinne, dass die Größe dargestellt werden kann, oder Sie wirklich Wert auf Genauigkeit verlieren? – ybungalobill

Antwort

2

Da der Faktor ein Fließkommawert ist (long double), wird das Ergebnis fast immer passen. Es wird nicht immer sehr genau sein, wenn die Zahl groß wird, aber es wird niemals überlaufen, wenn der Exponent nicht größer ist, als in eine Mantisse von long double passen kann (normalerweise 11 Bits, also normalerweise 2^11).

Wenn Sie einen groben Test auf Genauigkeit durchführen möchten, berechnen Sie die Antwort und prüfen Sie, ob sie in einem vernünftigen Bereich wie [10^20, 10^-20] liegt.

2

Grundsätzlich können Sie dies nicht genau tun, da das Format, wie long double die Daten speichert, vom Standard nicht spezifiziert ist. Sie können jedoch annähern, was Sie wollen, indem Sie vergleichen mit: numeric_limits<long double>::digits, numeric_limits<long double>::radix, numeric_limits<long double>::min_exponent und numeric_limits<long double>::max_exponent.

0

Der Header float.h/cfloat gibt einige Maxima und Minima, aus denen Sie Bit-Limits ableiten können, aber das scheint ein wenig peinlich; Was ich persönlich tun würde, ist, die Grenzen für mantissa, exponent und base als Konstanten zu definieren, explizit für jede Plattform, die Sie unterstützen, mit einer #pragma Warnung und Kommentaren, um Plattformen zu behandeln, die Sie nicht kennen.

Verwandte Themen