CodeGym /Java Blog /ランダム /Java Float キーワード
John Squirrels
レベル 41
San Francisco

Java Float キーワード

ランダム グループに公開済み
コンピューティング技術の発展のある時点で、中央処理装置には浮動小数点数を処理するためのハードウェア デバイスが必要であることが明らかになりました。今日では、すべてのコンピューター アーキテクチャがこのような数値を効率的に処理できます。もちろん、プログラミング言語でも、対応するデータ型がなければできません。Java には、float と double という 2 つの浮動小数点データ型があります。Java Floatキーワードは、メモリ内で 32 ビットを占有する実数を定義します。この記事ではそのような数字について説明します。

浮動小数点数。実数はコンピュータにどのように保存されるのでしょうか?

実数をコンピュータのメモリに保存するには、特定の数のビットが割り当てられます。実数は、符号 (プラスまたはマイナス)、仮数、指数として保存されます。仮数と指数とは何かについては、例を挙げて説明するのが最も分かりやすいでしょう。月のおおよその質量は 7*1022 です。ここで 7 はカマキリ、22 は指数です。画面上に大きな数字を表示する場合、またはその逆に非常に小さな数字を表示する場合は、7E22 のようなエントリが表示されます。これは浮動小数点数で、ここの 7 はカマキリ、22 は指数または 10 のべき乗です。この表記は指数表記と呼ばれます。

Java float キーワードと Java Double キーワード

Java の Float 値 (浮動小数点数または実数) は、floatおよびdouble型で表されます。これらのキーワードは、小数点以下の特定の符号までの値を保存するために使用されます。 double は、与えられた値または計算の結果として得られた値にできるだけ近い、倍精度の数値です。Java Double は、数学的計算 (平方根、サイン、コサインなど) だけでなく、特定の精度が重要なすべての計算にも使用されます。 floatデータ型は、精度の低い浮動小数点型に使用されます。メモリを節約するために、これはほとんど使用されません。以下に、float と double に関する主な情報とその違いをまとめた表を示します。
浮く ダブル
主要 浮動小数点数は単精度値です 倍精度の値です
デフォルトのサイズ 4バイト(32ビット) 8バイト(64ビット)
デフォルト値 0.0f 0.0
範囲 1.4e-045 から 3.4e+038 まで 4.9e-324 から 1.8e+308
何に使われるのか メモリを節約するには 小数を比較的正確に扱うには
したがって、Floatキーワードは、メモリ内で 32 ビットまたは 4 バイトを必要とする数値、つまり単精度値を意味します。一部のプロセッサでは、このような数値の処理が高速であり、すでに述べたように、倍精度の数値と比較した場合、占有するスペースが少なくなります。しかし、スピードに関しては一概にそうとは言えません。一部の最新のプロセッサが正確に 2 倍の精度の数値をより高速に処理するとします。

Java Float と Double 宣言

double型の数値は、他の型の数値と同じ方法で宣言できます。
double myDouble = 2.7;
ただし、この方法で浮動小数点数を表す場合、コンパイラは数値の型を double に変更するように要求します。以下はfloat変数の間違った例です。
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14;
   }
}
このプログラムを実行すると、次のことが起こります。
Error:(4, 25) java: incompatible types: possible lossy conversion from double to float
実際のところ、浮動小数点数の使用は望ましくなく、メモリを節約する目的でのみ使用する必要があります。Java の実分数はすべてデフォルトでDoubleであり、言語の構文もこれを強調しています。本当に float 型を使用したい場合は、数値の末尾に f を付けて明示的に指定する必要があります。
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14f;
   }
}
ちなみに、float と double の数値は指数形式で書くことができます。
float myFloat2 = 2E22f;
double myDouble2 = 3e10;
「通常の」表現で十分に大きな数値を使用すると、Java はそれらを指数形式で即座に表示します。例を見てみましょう:
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);
           }
       }
このプログラムの作業結果は次のとおりです。
myFloatNumber1 = 2.1828183E12 myFloatNumber2 = 1.98226121E13 myFloatNumber1 + myFloatNumber2 = 2.1828183E121.98226121E13

特殊な float および double 数値の例

Java 言語には、オーバーフローやエラーを示すために使用される 3 つの特別な浮動小数点数があります。どうぞ:
  • 正の無限大は、正の数を 0 で割った結果です。定数Double.POSITIVE_INFINITYおよびFloat.POSITIVE_INFINITYで表されます。

  • 負の無限大は、負の数を 0 で割った結果です。Double.NEGATIVE_INFINITY 定数Float.NEGATIVE_INFINITY定数で表されます。

  • NaN (非数値) は、0/0 の計算、または負の数の平方根を取ることを表します。定数Double.NaNおよびFloat.NANで表されます。

これらの特殊な浮動小数点数の使用例を次に示します。
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);

   }
}
結果は次のとおりです。
無限 - 無限真 NaN NaN

倍精度で十分ですか?

実際、 Double型の倍精度にもかかわらず、丸め誤差が許容されないため、財務計算などで浮動小数点数を使用することは最良のアイデアではありません。そこで、次のプログラムの出力を画面に表示してみます。
public class FloatExample {
   public static void main(String[] args) {
       System.out. println( "2.0 - 1.1 = " + (2.0 - 1.1));
   }
}
次の結果が得られます。
2.0 - 1.1 = 0.89999999999999999
結果が 0.9 になると仮定するのが論理的です。ただし、このようなエラーは非常に一般的であり、数値の内部バイナリ表現に関連しています。たとえば、1/3 の正確な値を小数として表すことはできません。もちろん、バイナリ システムにも同様の制限があります。タスクで丸め誤差を排除する必要がある場合、Java にはそのためのBigDecimalクラスがあります。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION