
以下のようにすると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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語のマクローリン展開ローラン展開のコードについて 3 2022/12/15 14:45
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# (C言語)めちゃくちゃな値になってしまいます。 5 2022/08/13 11:55
- 数学 単振り子とルンゲ・タック法 1 2022/07/15 00:05
- C言語・C++・C# c言語について 下記の計算結果を出力するコードを記述する問題で 0-4 3.14×2 5÷3 30÷ 5 2022/05/17 22:41
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
あなたなりのストレス発散方法を教えてください!
自分なりのストレス発散方法はありますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
C#でbyte配列から画像を表示させたい
C言語・C++・C#
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
-
4
C#の演算でオーバーフローしてるみたいなのですが....
その他(プログラミング・Web制作)
-
5
0xffffとは?
C言語・C++・C#
-
6
c言語で、繰り返し文の中で、0.01づつ増やすには?
C言語・C++・C#
-
7
c++ cmathとmath.h
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
float型とdouble型の変数の違い...
-
C言語の型による処理速度の違い
-
doubleの変数にintとintの割り...
-
プログラムでの数字につく”f”の...
-
C言語 関数プロトタイプ宣言の...
-
int とdoubleの比較
-
listに構造体を格納
-
このプログラムを添削してください
-
C言語を実行すると-infが出てき...
-
qsortと動的確保の2次元配列
-
DWORDの警告
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
C言語 初心者です
-
二分探索で方程式の解を求める方法
-
LU分解について
-
2次方程式の解
-
正規分布するプログラムを教え...
-
double型とint型で三分の一乗の...
-
(C,C++言語)関数の引数は自動キ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C言語 関数プロトタイプ宣言の...
-
C言語の型による処理速度の違い
-
2次方程式の解を求めるプログ...
-
関数におけるif文とreturn文に...
-
int とdoubleの比較
-
C++で外積
-
C言語で台形公式を使った二重積...
-
指数の表示
-
C言語のpow関数の不具合
-
(C,C++言語)関数の引数は自動キ...
-
数値を指数部と仮数部に分離したい
-
C言語のプログラムで#include<m...
-
プログラミングでのテイラー展開
おすすめ情報