• ベストアンサー

java 実数の割り算

javaで簡単な整数と実数での四則演算のプログラムを作りました。 整数での計算はint型で実数はdouble型で作りました。 数値を10と3(10.0と3.0)にしたのですが、 整数では 10/3=3  となり 実数では 10.0/3.0=3.3333333333333335 となりました。 この違いはなんなんでしょう? 整数のほうはなんとなくわかるのですが、実数のほうはさっぱり・・・ いろいろ聞きまわって、64ビットで有効桁数が・・とは聞いたのですが理解できず・・ 教えてください!!

  • Java
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

「丸め誤差」というキーワードで検索して下さい。

その他の回答 (1)

回答No.2

内部は2進数だからです。つまり、0.5, 0.25, 0.125 などの2で割って行った値とそれを加えた値(0.5+0.25=0.75など)以外は2進数的に「丁度ピッタリ」な数にならないということです。たとえば10進数の0.1は2進数だと0.00011001100110011...という循環小数になります(そのため0.1を100回足す計算をしても10になりません。下の方の桁で四捨五入などをして桁を切り詰めれば"10"と表示することはできますが)。ということで実数計算は常に誤差が出るものだと思って下さい。 内部が2進数になっている理由はその方が計算を高速で行えるためです。

関連するQ&A

  • Javaについての質問です

    javaのプログラミングを練習していたのですが 1,System.in,System.outはどのようなオブジェクトクラスかを表示するプログラムを作れ 2,整数の四則演算を行うプログラムを書け 実行例 C:¥4>java K13_4 2 + 3 2+3=5 C:¥4>java K13_4 2 - 3 2-3=-1 C:¥4>java K13_4 2 x 3 2x3=6 C:¥4>java K13_4 20 / 3 20/3=6 がどうしても作れません. どなたかプログラムを教えて頂けないでしょうか? よろしくお願い致します.

  • javaの課題。。

    Java課題です。お願いします。 複素数クラスを作り、二次方程式の虚数解を求めるプログラムを書け。 以下、本プログラムの仕様。 メソッドとして以下の四則演算を定義すること。 Complex plus(Complex c) Complex minus(Complex c) Complex mul(Complex c) Complex div(Complex c) また、複素数の平方根を計算するメソッド Complex sqrt() も定義すること。虚数部が 0 の場合(実数の場合)のみに対応すればよい。 実数の平方根はMath.sqrtを使ってよい。 二次方程式の解を求めるプログラムでは 3 つの係数(実数)を入力 させ、その数値から複素数オブジェクトを作って計算を行うこと。

  • javaで1.8x10の308乗÷(ー1.8x10の308)乗割り算をしたいです。

    java初心者です。下記の割り算するプログラムが できません。ご指導下さい。実行結果はコメントどめ しました。 /*num1=1.8x10^308,num2=1.8x10^308としnum1/num2,(-num1)÷(-num2)、num1/0を計算する。 実行結果 C:\keisanclass>java WarizanMain 1.8 1.8 NaN 演算不可能と表示されました。 C:\keisanclass>java WarizanMain -1.8 -1.8 NaN 演算不可能と表示されました。 C:\keisanclass>java WarizanMain 1.8 0 Infinity 無限大と表示されました。 */ class WarizanMain { public static void main(String args[]) { double num1=0.0; double num2=0.0; num1=Double.parseDouble(args[0]); num2=Double.parseDouble(args[1]); double z = Math.pow(10,308); System.out.println((num1*z)/(num2*z)); } }

    • ベストアンサー
    • Java
  • Javaで四則演算をしたい

    Javaで四則演算をおこなうプログラムを組みたいのですが. オプション機能をつかって *********** java Calc [-options] N1 N2... java Calc -m 4 2 4 6 8 20.0 ******* という風に-mは[-m 4]でまえから4文字を読み取り,加算するプログラムにしたいのです. どなたか助言お願いします.

  • Java import.text.* とは?

    テスト勉強をしています。 以前四則演算のプログラムを作りました import java.text.*; import java.io.*; class _kadai1_sisokuenzan { public static void main(String[] args) throws Exception{ int a,b,c,d,e,f,g; double ja,jb,jc,jd,je,jf; BufferedReader inp=new BufferedReader (new InputStreamReader(System.in)); となっています。 はじめのimport の宣言2行の意味が全く分かりません。 なぜこのプログラムでこの文が必要なのか、簡単にご説明していただければ幸いです。

    • ベストアンサー
    • Java
  • 100ビットの整数型

    0 から 2^100-1 までの整数について、とある計算をする必要があるのですが、java の int だと 32ビットしかないのであふれてしまいます。 100ビットの整数型というのは自作するしかないでしょうか?

    • ベストアンサー
    • Java
  • 16ビットCPUで32ビットの計算方法

    16ビットのCPUを持つシーケンサ(PLC )で32ビットの四則演算(加算、減算、乗算、除算)をさせたいのですが、命令語にダブルワードを処理できるものがないので、演算がオーバーフローした情報から何かしら自分でプログラムを組まなければなりません。 16ビットのレジスタを使った32ビット演算の考え方を教えてください。

  • doubleとintの違い

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

  • 実数 x を 0 (ゼロ)で除す(x/0)演算に関する質問

    現在の四則演算体系の数学では,実数 x を 0 (ゼロ)で除しては, いけないことになっています.なぜいけないのかは,ここでは論じない ことにします.これは,その理由を理解している方に向けての質問です. 実数 x を 0 (ゼロ)で除す(x/0)演算に関しては,現在までに 有効な演算体系が構築されていないように感じます. 実数 x を 0 で除す演算を,ここでは仮に「零除演算」(れいじょえんざん) と呼ぶことにしましょう.そこで,以下の質問です. ▲ 質問(1): 零除演算の演算体系を構築する目的で研究している研究機関が 世界のどこかに存在しますか? ▲ 質問(2): 零除演算の演算体系を構築する目的で研究している研究サークルの ようなものが日本のどこかに存在しますか? ▲ 質問(3): 零除演算の演算体系を構築する目的で発表された研究論文が 世界・日本のどこかに存在しますか? なぜ,このような質問をするのかと言うと,興味ある問題だからです. 私も,多少とも研究,考察をしていますが,完全なものは完成してはいません. 定義,公理,演算規則などを決めて,四則演算上で矛盾のない体系が出来れば, そこで一応,完成ということにするつもりです.無矛盾の証明はそれからです. 何か知っておられる方,教えて下さい.

  • 四則演算のみの電卓まjavaプログラム

    四則演算のみの簡易電卓javaプログラムがわかりません。 数字・クリア・イコールはすべてボタンで表されている、 よくあるタイプの電卓です。 ネット上で探しましたが、ありそうで見つかりませんでした。記述をお願い致します。

専門家に質問してみよう