質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

431閲覧

C言語とJavaの計算結果の差について

pbdev

総合スコア21

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/01/15 09:09

現在業務でC言語で動作させていたものをJavaで動作させるため
C言語からJavaへの変換作業を行っています。
しかし、C言語で行っていた計算結果とJavaで行っている計算結果が一致しません。
懸念している点としては2点あります。
1.純粋にJavaの計算式を間違えている。
2.Doubleどうしの掛け算、割り算を行っているためC言語とJavaで計算結果が異なる。

上記の1点目はどうしようもないことなのですが。。。
2点目のケースで結果差に差異が出たりするものなのでしょうか?
また、計算結果の差としては小数点以降の桁が一致していません。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2019/01/15 09:12

試されたC言語とJavaの両コードがないと、コードが問題なのか入力値が問題なのかなどが判断できません。 お書きになったコードをご提示ください。
mather

2019/01/15 09:25

1.の単純に間違えている可能性も感じているなら、なおさらソースコードを提示すべきです。 もし社内のルールでそのままのコードが公開できないなら、現象を再現する最小限のコードを作ってみて、ここに記載してください。
guest

回答3

0

2.はちょっと考えづらいので、1.じゃないでしょうか

投稿2019/01/15 09:13

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

どうやら問題としてはC言語では計算後にdoubleに変換している変数があり、Javaでは最初にdoubleに変換した後計算を行っていたため差が生まれていました。
ソースを載せてくださいとのご指摘はごもっともだと感じました。
今後はこういった質問をする際はサンプルソースでも記載したいと思います。

投稿2019/01/15 09:43

pbdev

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2019/01/15 10:22

ん?そもそも、ロジックが違うということ?
pbdev

2019/01/16 00:14 編集

C言語:(double)(a / b) Java : (double)a / (double)b ※aはlong型,bはint型 上記のような形でキャストするタイミングが異なっていました。 そのため、C言語の場合は小数点以下が切り捨て、Javaは小数点以降も算出していました。
guest

0

2.Doubleどうしの掛け算、割り算を行っているためC言語とJavaで計算結果が異なる。

現在、あらゆる言語の浮動小数点演算は、基本的に IEEE754 という仕様に従っているはずなので、
C言語の倍精度の演算結果とJavaの倍精度の演算結果で結果が異なるということはないはずです。
C言語、Java 共に単精度は float、倍精度は double 型で表現されますので、型名も一緒です。

小数点以降の桁が一致していません

こうなる原因として考えられるのは、移植の際にC言語のコードと同じになっていないとかではないでしょうか。(つまり、原因1)
例えば、
a + (b + c) となっていたコードを移植した際に a + b + c とした場合、演算結果が丸め誤差の影響で異なる可能性があります。

投稿2019/01/15 09:19

編集2019/01/15 09:19
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問