CodeGym/Blog Java/Random-PL/Słowo kluczowe Java Float
John Squirrels
Poziom 41
San Francisco

Słowo kluczowe Java Float

Opublikowano w grupie Random-PL
W pewnym momencie rozwoju technologii obliczeniowej stało się jasne, że jednostki centralne potrzebują urządzeń sprzętowych do przetwarzania liczb zmiennoprzecinkowych. Obecnie wszystkie architektury komputerowe mogą efektywnie współpracować z takimi liczbami. Oczywiście w językach programowania również nie można obejść się bez odpowiednich typów danych. W Javie istnieją dwa typy danych zmiennoprzecinkowych: float i double. Słowo kluczowe Java Float definiuje liczbę rzeczywistą zajmującą 32 bity w pamięci. O takich liczbach porozmawiamy w tym artykule.

Liczb zmiennoprzecinkowych. W jaki sposób liczby rzeczywiste są przechowywane w komputerze?

Do przechowywania liczb rzeczywistych w pamięci komputera przydzielana jest określona liczba bitów. Liczbę rzeczywistą przechowuje się jako znak (plus lub minus), modliszkę i wykładnik. Czym jest mantysa i wykładnik, najlepiej wyjaśnić na przykładzie. Przybliżona masa księżyca wynosi 7* 1022. Tutaj 7 to modliszka, w 22 wykładnik. Wyświetlając na ekranie duże lub odwrotnie, bardzo małe liczby, możesz zobaczyć wpis taki jak 7E22. To jest liczba zmiennoprzecinkowa, 7 to modliszka, a 22 to wykładnik lub potęga 10. Ten zapis nazywa się notacją wykładniczą.

Słowo kluczowe Java float i podwójne słowo kluczowe Java

Wartości zmiennoprzecinkowe (liczby zmiennoprzecinkowe lub liczby rzeczywiste) w Javie są reprezentowane przez typy float i double . To właśnie te słowa kluczowe służą do przechowywania wartości do określonego znaku po przecinku. double to liczby o podwójnej precyzji, jak najbardziej zbliżone do wartości podanych lub uzyskanych w wyniku obliczeń. Java Double służy do wszelkich obliczeń matematycznych (pierwiastek kwadratowy, sinus, cosinus, ..), a także do wszelkich obliczeń, w których ważna jest pewna dokładność. Typ danych float jest używany w przypadku mniej precyzyjnego typu zmiennoprzecinkowego. Jest używany bardzo rzadko w celu oszczędzania pamięci. Poniżej znajduje się tabela z głównymi informacjami na temat float i double oraz ich różnicami.
Platforma Podwójnie
Główny Float to wartość o pojedynczej precyzji Jest to wartość o podwójnej precyzji
Rozmiar domyślny 4 bajty (32 bity) 8 bajtów (64 bity)
Domyślna wartość 0,0 f 0,0
Zakres od 1.4e–045 do 3.4e+038 od 4,9e–324 do 1,8e+308
Do czego to służy Aby zaoszczędzić pamięć stosunkowo dokładnie pracować z liczbami ułamkowymi
Zatem słowo kluczowe Float oznacza liczbę, wartość o pojedynczej precyzji, która zajmuje 32 bity lub 4 bajty w pamięci. Na niektórych procesorach praca z takimi liczbami jest szybsza i, jak już wspomniano, zajmują one mniej miejsca w porównaniu z liczbami o podwójnej precyzji. Nie da się jednak jednoznacznie powiedzieć o szybkości. Załóżmy, że niektóre nowoczesne procesory przetwarzają liczby dokładnie o podwójnej precyzji szybciej.

Float Java i podwójna deklaracja

Możesz zadeklarować liczbę typu double w taki sam sposób, jak liczby innych typów:
double myDouble = 2.7;
Jeśli jednak w ten sposób reprezentujesz liczbę zmiennoprzecinkową, kompilator będzie wymagał zmiany typu liczby na double. Oto niepoprawny przykład zmiennej float :
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14;
   }
}
Oto, co się stanie, jeśli uruchomisz ten program:
Error:(4, 25) java: incompatible types: possible lossy conversion from double to float
Faktem jest, że używanie liczb zmiennoprzecinkowych jest niepożądane i należy to robić wyłącznie w celu zaoszczędzenia pamięci. Wszystkie rzeczywiste liczby ułamkowe w Javie mają domyślnie wartość Double i składnia języka również to podkreśla. Jeśli naprawdę chcesz pracować z typem zmiennoprzecinkowym, musisz określić go jawnie za pomocą f kończącego liczbę.
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14f;
   }
}
Nawiasem mówiąc, liczby zmiennoprzecinkowe i podwójne można zapisać w formie wykładniczej.
float myFloat2 = 2E22f;
double myDouble2 = 3e10;
Jeśli użyjesz wystarczająco dużych liczb w ich „normalnej” reprezentacji, Java wyświetli je natychmiast w formie wykładniczej. Weźmy przykład:
public class FloatExample {
   public static void main(String[] args) {
//float variables
               float myFloatNumber1=2182818284590.45f;
               float myFloatNumber2=19822612787260.141592181f;
               System.out.println("myFloatNumber1 = " + myFloatNumber1);
               System.out.println("myFloatNumber2 = " + myFloatNumber2);
       System.out.println("myFloatNumber1 + myFloatNumber2 = " + myFloatNumber1 + myFloatNumber2);
           }
       }
Efekt pracy tego programu znajduje się tutaj:
mójFloatNumber1 = 2,1828183E12 mójFloatNumber2 = 1,98226121E13 mójFloatNumber1 + mójFloatNumber2 = 2,1828183E121.98226121E13

Przykład specjalnych liczb zmiennoprzecinkowych i podwójnych

W języku Java istnieją trzy specjalne liczby zmiennoprzecinkowe, które służą do wskazywania przepełnień i błędów. Tutaj są:
  • Dodatnia nieskończoność jest wynikiem podzielenia liczby dodatniej przez 0. Reprezentowana przez stałe Double.POSITIVE_INFINITY i Float.POSITIVE_INFINITY .

  • Ujemna nieskończoność jest wynikiem podzielenia liczby ujemnej przez 0. Reprezentowana przez stałe Double.NEGATIVE_INFINITY i Float.NEGATIVE_INFINITY .

  • NaN (nie liczba) reprezentuje obliczenie 0/0 lub pierwiastek kwadratowy z liczby ujemnej. Reprezentowane przez stałe Double.NaN i Float.NAN .

Oto przykład użycia tych specjalnych liczb zmiennoprzecinkowych:
public class FloatExample {
   public static void main(String[] args) {
       int myInt = 1;
       float zero = 0.0f;
       double negZero = -0.0;
       double negativeInfinity = Double.NEGATIVE_INFINITY;
       double positiveInfinity = Float.POSITIVE_INFINITY;

       System.out.println(myInt / zero);
       System.out.println(myInt / negZero);
       System.out.println(zero == negZero);
       System.out.println(negativeInfinity * 0);
       System.out.println(positiveInfinity+negativeInfinity);

   }
}
Wynik to:
Nieskończoność -Nieskończoność prawdziwa NaN NaN

Czy podwójna precyzja jest wystarczająca?

Tak naprawdę pomimo podwójnej precyzji typu Double , używanie liczb zmiennoprzecinkowych np. w obliczeniach finansowych nie jest najlepszym pomysłem, gdyż błędy zaokrągleń są niedopuszczalne. Spróbuj więc wyświetlić dane wyjściowe następującego programu na ekranie.
public class FloatExample {
   public static void main(String[] args) {
       System.out. println( "2.0 - 1.1 = " + (2.0 - 1.1));
   }
}
Otrzymasz następujący wynik:
2,0 - 1,1 = 0,8999999999999999
Logiczne byłoby założenie, że wynik wyniesie 0,9. Jednak takie błędy są dość powszechne i są związane z wewnętrzną binarną reprezentacją liczb. Nie możemy na przykład przedstawić dokładnej wartości ⅓ jako ułamka dziesiętnego; oczywiście podobne ograniczenia obowiązują w systemie binarnym. Jeśli zadanie wymaga wyeliminowania błędów zaokrągleń, Java posiada do tego klasę BigDecimal .
Komentarze
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Ta strona nie ma jeszcze żadnych komentarzy