
以下のようにするとdには0.5ではなく0が代入されます。
int x = 1, y = 2;
double d = x / y;
これを回避するために以下のようにするのが一般的だと習いました。
//1.
double d = (double)(x) / y; // これでdには0.5が代入される
これを以下のようにしてしまうのに問題はあるでしょうか?
//2.
double d = (double)(x) / (double)(y);
//3.
double d = x / (double)(y);
また、1.と2.と3.ではどれがより良いのでしょうか?
単純に好みの問題なのでしょうか?
以上、よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
恐れ入ります。
単純に好みの問題かと思います。
CやC++の規格に準拠したコンパイラであれば、結果的に同じ式として扱ってくれます。
***
ただし、1,2,3ではない別種の方法を良く用いるので参考までに挙げておきます。
int x = 1;
int y = 2;
double dpoX = 0;
double dpoY = 0;
double d = 0;
dpoX = (double)x;
dpoY = (double)y;
d = dpoX / dpoY; /* 計算するときには、精度を揃えておく */
整数を使う場面では整数を使い、倍精度の計算をするときには倍精度で計算するのが良いかと。混ぜると混乱の元です。
(個人的には、ハナからdoubleで取り扱うべきかと思います)
速度的には前述の1,2,3と同様に、計測できるほどの速度低下にはなりません。
(可読性を犠牲にするのは、「除算は遅いから使いたくない」という様な時だけにする方が良いと思います)
ご参考になれば幸いです。
No.2
- 回答日時:
計算途中で暗黙の型変換が行われるため
結果的に生成される実行ファイル(Windowsならexe)は通常、1~3全て同じです。
最も省略して書くならxやyへの括弧も不要で
double d = (double)x / y;と書けます。(演算子、記号の優先順位は決まっています。)
見やすいかどうかという問題もありますが
それも個人差があるので、やはり好みの問題が大きいですね。
ただ個人的に3は無いかな・・・
下記URL
http://www.icepp.s.u-tokyo.ac.jp/~sakamoto/educa …
1.7.型変換とプロモーションが参考になると思います。
二項演算の場合、二つの式の型が異なる場合、自動的に型変換が起こります。(以下略)
No.1
- 回答日時:
Cやjavaでは,int型とdouble型の変数を演算すると,結果はdouble型になります.このため,int型同士の演算で結果をdouble型で欲しい場合には,どちらかの(或いは両方の)変数をdouble型にキャストするわけです.
よって文法上は,1,2,3とも問題無いです.実行速度の差も殆ど無いと思います.あとはソースコードの可読性の問題になります.個人的には,2.が「小数点型で結果を出す」というメッセージが強く伝わるので良いと思いますが,基本的には好みや作業グループ内でのコーディング規約に拠るものだと思います.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
DWORDの警告
-
C 開放してるのにエラー(doubl...
-
C言語の複素数についてです。
-
float型とdouble型の変数の違い...
-
プログラミングでのテイラー展開
-
カウントアップタイマ
-
difftime()について
-
2次方程式の解を求めるプログ...
-
c言語のコンパイルエラー canno...
-
割り算ができない
-
C言語でdouble型の小数点の引き...
-
至急です! マクロ定義で #defi...
-
c言語について 下記の計算結果...
-
たくさんの数の平均を求める方...
-
int とdoubleの比較
-
c言語で、繰り返し文の中で、0....
-
C言語で台形公式を使った二重積...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
float と double
-
ラグランジュの補間法のCプログ...
-
C言語のプログラムで#include<m...
-
c言語のコンパイルエラー canno...
-
2分法で方程式の複数の解を自...
-
2次方程式の解を求めるプログ...
-
C言語で台形公式を使った二重積...
-
Cプログラミングの問題です。ニ...
-
物体が往復する動きを作りたい
-
関数におけるif文とreturn文に...
-
doubleは常に%lfとするべきなのか
おすすめ情報