以下のようにすると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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
0除算して、落ちるプログラムと落ちないプログラム
C言語・C++・C#
-
float型とdouble型の変数の違いを教えてほしいです
C言語・C++・C#
-
C言語 配列の長さの上限
C言語・C++・C#
-
-
4
配列を使わずに、変数名を動的にループで回したい
C言語・C++・C#
-
5
数字の double 型 を int型 にする時
C言語・C++・C#
-
6
C#でbyte配列から画像を表示させたい
C言語・C++・C#
-
7
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
8
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
9
2の補数を計算するプログラム
C言語・C++・C#
-
10
C++のfor文について
C言語・C++・C#
-
11
C言語でdouble型の小数点の引き算をしたら1.15-1.1の結果が0.05のはずが0.04999・・822になります。0.05で使用したいのですが。
C言語・C++・C#
-
12
e^(x^2)の積分に関して
数学
-
13
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
14
【C#/Java?】try-catchでcatchせずにfinallyは一般的?
その他(プログラミング・Web制作)
-
15
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
16
[C#]ListView一覧表示時の幅設定について
その他(プログラミング・Web制作)
-
17
C#テキストボックスの文字を配列にいれてその後表示する
C言語・C++・C#
-
18
セグメントエラー
C言語・C++・C#
-
19
C言語での引数の省略方法
C言語・C++・C#
-
20
math.hに含まれる関数が使えない
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
float型とdouble型の変数の違い...
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
doubleは常に%lfとするべきなのか
-
ニュートン法
-
相互相関関数
-
Cで3乗根を求める方法
-
floating point not loadedとは?
-
C言語で-23乗を取り扱うには
-
関数におけるif文とreturn文に...
-
C言語のプログラムで#include<m...
-
カウントアップタイマ
-
テイラー展開(C言語)
-
「割り算」 と 「分数の掛け算」
-
線形補間
-
物体が往復する動きを作りたい
-
EXE1→DLL→EXE2数値を受け渡す方法
-
-1.#IND00と出てしまうのですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報