Gdybym wykonaćJaka jest różnica między "Float a = 3f" i "Float a = 3.0" w Javie?
97346822*3f, result is 2.9204048E8,
jednak
97346822*3.0 gives me 2.92040466E8.
proszę wyjaśnić.
Gdybym wykonaćJaka jest różnica między "Float a = 3f" i "Float a = 3.0" w Javie?
97346822*3f, result is 2.9204048E8,
jednak
97346822*3.0 gives me 2.92040466E8.
proszę wyjaśnić.
Numer 3.0
jest literal representation o wartości double
(jest to równoważne 3.0d
), natomiast 3.0f
jest wartością float
. Różne szczegóły wyjaśniają, dlaczego uzyskujesz różne wyniki - plik double
jest zapisywany przy użyciu 64-bitów, a float
używa 32-bitów.
3.0 jest dokładnie przedstawiany zarówno w float, jak i double, więc nie będzie różnicy dla tego konkretnego przypadku. –
@ Patricia: Prawidłowo, ale wynik 97346822 * 3 nie jest dokładnie reprezentowany w float. –
97346822*3.0
będzie traktowany jako double
.
podstawie oracle tutorial
Podwójna typu danych jest podwójnej precyzji 64-bitowe zmiennoprzecinkowe IEEE 754. Jego zakres wartości wykracza poza zakres tej dyskusji, ale jest określony w sekcji Floating-Point Types, Formats i Values w specyfikacji języka Java. W przypadku wartości dziesiętnych ten typ danych jest zwykle domyślnym wyborem.
97346822*3f
będą traktowane jako float
.
Są to ustalenia związane z this question i moja odpowiedź na to samo.
Podczas gdy wartości 3,0 i 3f mają tę samą wartość po wprowadzeniu do wartości zmiennoprzecinkowych, rzeczywistą wartość wykorzystuje się jako pamięć roboczą dla operacji zmiennoprzecinkowej. Wewnętrzne wartości, które są częścią mnożenia, same w sobie nie pasują do wartości zmiennoprzecinkowych i są modyfikowane, co powoduje różnicę między uzyskanymi wynikami o 14,0.
Inni odpowiedzieli na twoje pytanie dotyczące różnych wyników. Należy jednak zauważyć, że deklaracja _ umieszczona w tytule, Float a = 3.0 (lub float a = 3.0), zostanie odrzucona przez kompilator, ponieważ 3.0 jest traktowany jako 'double' i nie lubi wymuszasz na zmiennej o mniejszej precyzji (bez wyraźnego rzutowania). – ajb
Dlaczego pytania w tytule i treści są inne? –
Musisz wiedzieć, że 'float' nie jest tym samym, co' Float', który nie jest tym samym, co 'double'. Kiedy zdasz sobie sprawę, że typ rzeczywiście ma znaczenie, nie jest zaskoczeniem, że odpowiedzi są różne. –