• 締切済み

doubleとintの違い

最近はじめたのですが、doubleとintの違いが分からなくて苦労しています。というか整数と実数の違いもよく分かっていないのですが、これらは明確に区別すべきものなのでしょうか?実際に作る中で、何を実数として認識し、何を整数として認識すべきなのかが理解できません。 解説よろしくお願いします。

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.5

 個数の計数など割り切った数値を扱う場合は整数を、 超越関数の演算などの区切りのない連続した数値を扱う場合は実数を使います。 以下の例で、上の円の動きのように数値を扱う場合は整数を、 下の円の動きのように数値を扱う場合には実数を使うことになるでしょう。 import java.util.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; import java.awt.geom.*; class circlecanvas extends Canvas { VolatileImage OSI = null; Graphics2D G; AffineTransform BT; double Si; public circlecanvas() { super(); }; public void Start() { OSI = createVolatileImage(540, 80); G = (Graphics2D)OSI.getGraphics(); G.setColor(Color.RED); G.setTransform(new AffineTransform()); G.scale(20.0, 20.0); BT = G.getTransform(); Si = 0.0; (new Timer()).schedule(new MoveTask(), 1000, 100); }; public void paint(Graphics g) { if (OSI != null) g.drawImage(OSI, 0, 0, getWidth(), getHeight(), this); }; public void update(Graphics g) { paint(g); }; class MoveTask extends TimerTask { public void run() { double x = 12.5 * Math.sin(Si) + 12.5; G.setColor(Color.WHITE); G.fillRect(0, 0, 540, 80); G.setColor(Color.RED); G.setTransform(BT); G.translate(x, 2.0); G.fillOval(0, 0, 2, 2); G.setTransform(BT); G.translate((int)x, 0); G.fillOval(0, 0, 2, 2); Si += 0.1; repaint(); }; } } public class intdouble { public static void main(String args[]) { Frame MF = new Frame("int and double"); MF.setSize(550, 100); circlecanvas CC = new circlecanvas(); MF.add(CC, BorderLayout.CENTER); MF.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); }; }); MF.setVisible(true); CC.Start(); }; }

  • had4149
  • ベストアンサー率18% (9/48)
回答No.4

int:32bitの整数 double:64bitの不動小数点数 範囲は#3の方の仰っている通りです。 "単精度"、"倍精度"と表現をしていることもあるようです。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.3

int >integer 整数型(-2147483648~2147483647) double >倍精度浮動小数点型(- 1.7976931348623157E+308~+1.7976931348623157E+308)  

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

小数が必要なもの、計算の数値が有効桁自体は多くないが桁が大きいモノをdoubleで扱うというような感じでいいんじゃないでしょうか

  • TALLY-HO
  • ベストアンサー率29% (103/354)
回答No.1

簡単ですよ。「小数点が付くか、つかないか」です。 たとえば、ホームページのアクセス回数なんていうのは int型で定義するのが普通です。0回、1回、2回・・・ アクセス回数0.3回!なんていいませんよね。 ±にかかわらず、小数点が付かないのが「整数」。 逆に身長や体重はdouble型やfloat型で定義します。 “45.6kg”や“178.5cm”など小数点 がつくものが「実数」です。 どうして「数値型」という1つの型にまとめないのかは 内部処理の関係でして、双方メリットとデメリットが。 整数型(int系)は数値をそのまんま記憶してます。 そのため正確に値を記憶できますが覚えられる範囲が 非常に狭かったりします。(-32768~+32767など。 Javaのint型はこの何倍も大きいですが、やっぱり狭い) 実数型(double系)は数値を拡大or縮小して記憶しています。 そのために記憶している値が実際の値と微妙に違う、 「誤差」が発生するのです。累積するとかなりの 違いになってしまうため、金融システムなどでは 国際法で明確に定義してあります。 実際、実数型では「-1」を正確に記憶できません。 その代わり、覚えられる桁数がとても大きいのです。 int型:-2147483648 ~ 2147483647 = 約10桁 double型: .79769313486232e308 ~ .79769313486232e308 =約308桁 double型はint型の2倍のメモリを使いますが、 桁数は2倍どころじゃないですね。 このような点を理解して、プログラムする値が どんな数値でどれぐらいの範囲に収まるのかを考えて 使い分けましょう。

関連するQ&A