Lange im Float, warum?

8
%Vor%

Warum gibt es kein Problem hinsichtlich der Größe des Datentyps und der impliziten Konvertierung?
Die Größe von float und long ist anders als wir wissen und die unten angegeben ist ...

%Vor%     
jak 04.12.2010, 06:08
quelle

4 Antworten

9

Ein Float-Bereich (ca. ± 3.4e38) ist viel größer als ein Long-Bereich (ca. ± 9.22e18), obwohl ein Long eine höhere Genauigkeit hat.

    
Ignacio Vazquez-Abrams 04.12.2010 06:09
quelle
5
  

Es gibt zwei Gründe

1. Wertebereich (d. H. Maximalwert).

%Vor%
  

As, maximaler Wert von float ist   größer als lang d. h. long ist in float enthalten.

%Vor%

2. Überlegenheit
Sie können einen Gleitkommawert nicht ohne explizite Konvertierung einem ganzen (einem nicht schwebenden) Wert zuweisen.

%Vor%

aber

%Vor%

Hier, auch vom obigen Beispiel, scheint es, dass float lange Daten enthalten kann, aber umgekehrt ist das nicht möglich.

BEARBEITEN: bezüglich der Größe des Datentyps siehe meine Frage Ist der Wertebereich abhängig von Größe des Datentyps?

    
Javed Akram 04.12.2010 12:51
quelle
1

lang repräsentiert den Int64-Typ, d. h. eine ganze Zahl, während float den Einzeltyp darstellt, d. h. eine Fließkommazahl. Und obwohl die Größe von long größer ist als die von float, ist es nicht möglich, von float in eine ganze Zahl zu konvertieren, ohne dass Informationen verloren gehen.

Weitere Informationen zu long und float type finden Sie unter msdn.

    
Devendra D. Chavan 04.12.2010 06:25
quelle
0

Leute haben den Bereich von float und long erwähnt, aber ein einfacherer Punkt ist, dass Sie nicht die meisten möglichen Gleitkommazahlen in einer ganzen Zahl darstellen können. Wenn Ihr float 3.14159 ist, können die beiden nächsten Werte, die ein long repräsentieren kann, 3 oder 4 sein - beides völlig falsch. Ein Float kann Milliarden von Werten darstellen, die zwischen 3 und 4 liegen. Es ist auch höchst unwahrscheinlich, dass ein Programmierer einen Float für einen Wert verwendet, wenn er ganzzahlige Werte darstellen möchte - es wäre ein sehr schlechtes Design Entscheidung. Es ist also einfach zu gefährlich, implizit float- & gt; int zu konvertieren, weil die Daten, die Sie mit ziemlicher Sicherheit verlieren werden, fast sicher wichtig sind. Es ist nicht etwas, was wir absichtlich sehr oft tun, und wenn wir es tun, möchten wir es normalerweise explizit machen (Math.Floor (floatValue)).

Wenn Sie in die entgegengesetzte Richtung gehen (int - & gt; float), kann ein Float normalerweise "adäquat" einen ganzzahligen Wert darstellen. Der Vorbehalt mit Fließkomma ist, dass Zahlen nur als Näherung gespeichert werden können - je größer der Wert, desto weniger genau kann er dargestellt werden. Die Genauigkeit eines Floats liegt jedoch bei etwa 6 signifikanten Werten - verlustbehaftet, aber Sie verlieren nur rund ein Millionstel des ursprünglichen Wertes. In vielen Fällen wird das unbedeutend sein. (In den Fällen, in denen wichtig sein wird, werden Programmierer immer sehr vorsichtig sein, die Launen von Gleitkommazahlen in ihre Berechnungen einzubeziehen, so dass sie in der Praxis selten ein Problem verursachen). Daher ist es bequemer / nützlicher, die implizite Umwandlung in diese Richtung zuzulassen, da dies absichtlich viel ist.

    
Jason Williams 15.12.2010 22:52
quelle

Tags und Links