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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

浮動小数点

浮動小数点は、コンピュータが数値を扱う際に実数を表現する方法のひとつです。 数値を、それぞれの桁の値が並んでいる仮数部と、小数点の場所を示す指数部で表します。

Q&A

解決済

3回答

4033閲覧

整数を浮動小数点型の変数に代入する場合に、数値リテラルは型に合わせたほうがよいでしょうか

tiitoi

総合スコア21956

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

浮動小数点

浮動小数点は、コンピュータが数値を扱う際に実数を表現する方法のひとつです。 数値を、それぞれの桁の値が並んでいる仮数部と、小数点の場所を示す指数部で表します。

0グッド

1クリップ

投稿2019/03/13 07:06

概要

変数が浮動小数点型である場合に、代入する値が整数 [1] であっても、型に合った数値リテラルを指定 [2] したほうがよいでしょうか。

[1] ここでいう整数とは int 型という意味ではなく、数学の意味での整数 (0, 1, 2, ...)
[2] 例えば、整数1を浮動小数点型の変数に代入する場合に、float 型なら 1.f、double なら 1. としたほうがよいかどうか

C++ の例

cpp

1#include <cmath> 2#include <iostream> 3 4int main() 5{ 6 // sample1 7 { 8 double a = std::sqrt(10); // (1) 9 double b = std::sqrt(10.); // (2) 10 11 std::cout << std::boolalpha << (a == b) << std::endl; // true 12 } 13 14 // sample2 15 { 16 float a = 0; // (1) 17 float b = 0.f; // (2) 18 19 std::cout << std::boolalpha << (a == b) << std::endl; // true 20 } 21}

Python の例

python

1import math 2 3a = math.sin(1) // (1) 4b = math.sin(1.) // (2) 5 6print(a == b) # True

聞きたいこと

以下のどれが好ましいでしょうか。

double a = 1; double a = 1.; double a = 1.0;
  • 縮小変換 (例: double -> float) ではないので、double a = 1 でも問題はないでしょうか?
  • コードの可読性の面では double a = 1. より double a = 1 のほうが好ましいでしょうか?

前からずっとモヤモヤしているので、皆さんのご意見を伺いたいと思います。
よろしくおねがいします。

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

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

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

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

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

guest

回答3

0

#変数に型のある言語
宣言時の初期化や、代入では、どうでも良いので、ルールを決めてそれに従えばいいかと思います。
1.というのは、プログラミングでしか出てこない表記なので、「タイプミスかも?」と思われるリスクがあると思います。1.と書くなら1.0が良い。

関数・メソッドの実引数の場合は、引数の型によって違うものが呼ばれたりする可能性があるかと。

ANSI規格以前のCだと、仮引数と実引数の型を合わせるのは自分の責任でしたね。今はそんな言語はないと思いますが。

#変数に型のない言語
意図した型のリテラルを書いた方が良いと思いますが、絶対ではない。
もちろん、言語や文脈によっては型を合わせないと意図通りに動かないケースがあると思うので、そういう場合は合わせるのが必須。

#整数型と実数型の区別がない言語
こういう言語は、質問の対象外ですかね。

投稿2019/03/13 07:37

otn

総合スコア84503

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

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

tiitoi

2019/03/13 07:53

ご回答ありがとうございます。 > 関数・メソッドの実引数の場合は、引数の型によって違うものが呼ばれたりする可能性があるかと。 変数の代入や関数にわたす引数だけしか頭になかったのですが、テンプレートやオーバーロード等も考えると、確かに最初から意図した数値リテラルで表したほうがよさそうですね。 > 整数型と実数型の区別がない言語 そのような言語があることを知らなかったのですが、どの言語なのでしょうか?
otn

2019/03/13 08:08

> どの言語なのでしょうか? JavaScriptとか、Perlとかがそうだと思います。内部表現では違いがあるかも知れませんが。
tiitoi

2019/03/13 08:30

なるほど。Javascript や Perl は使ったことがないのですが、そのような仕様の言語もあるのですね。 とても参考になりました。ありがとうございます。
guest

0

ベストアンサー

こんにちは。

pythonは分かりませんが、C++では整数と浮動小数点数は区別して書いた方が不具合は減ると思います。整数型へ代入するなら通常はint型リテラル、浮動小数点型(double、float)へ代入するならdouble型リテラルという意味です。
単一の定数を代入するだけなら大差ないですが、数式を書くことも多いと思います。除算があると結果が変わります。また代入先が浮動小数点型変数であることも強調できるので可読性も上がると思います。運が良ければコンパイラが警告してくれることもあります。

投稿2019/03/13 07:30

Chironian

総合スコア23272

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

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

tiitoi

2019/03/13 07:51 編集

回答ありがとうございます。 > C++では整数と浮動小数点数は区別して書いた方が不具合は減る 変数の代入や関数にわたす引数だけ考えていたのですが、テンプレートやオーバーロード等も考えると、確かに最初から意図した数値リテラルで表したほうがよさそうですね。 > 代入先が浮動小数点型変数であることも強調できるので可読性も上がる 1.0 より 1 のほうがシンプルと思っていましたが、確かに言われてみると、初めてコードを見た人も浮動小数点であることがわかる 1.0 のほうが可読性の面でもよい気がしてきました。
tiitoi

2019/03/13 07:57

お三方のご回答とても参考になりました。 迷ったのですが、可読性やバグを無くすという点で意図した型に合った数値リテラルで表したほうがよいというアドバイスがしっくりきましたので BA にさせていただきました。 皆さん、ご回答いただきありがとうございます。
guest

0

極論を言えば言語によるとなってしまいます。たとえば、JavaScriptには(近日登場予定のbigintを除けば)数値は浮動小数点数しかないので、11.1.0は何も異ならない定数です。そして、Rubyの場合は1.とだけ書くと整数の1に対するメソッド呼び出し(続くものをメソッドと解釈しようとする)となってしまいますので、1.では書けません。

そして、静的型付けのC++と、動的型付けのPythonではまた必要性も異なってくることでしょう。

投稿2019/03/13 07:17

maisumakun

総合スコア145183

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

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

tiitoi

2019/03/13 07:46 編集

迅速がご回答ありがとうございます。 確かに言語によって異なる問題であるため、言語ごとに区別して考える必要がありそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問