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

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

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

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

C++

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

Q&A

3回答

13052閲覧

指数記法「e」について

nomi

総合スコア32

C

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

C++

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

0グッド

0クリップ

投稿2017/09/23 04:30

質問内容

指数記法「e」の使い方のルールが分りません。
例えば、

c++

1#include <iostream> 2using namespace std; 3 4const int mod = 1e9+7; 5int mod2 = 1e9+7; 6#define MOD 1e9+7 7 8int main() { 9 cout << mod << endl; 10 cout << mod2 << endl; 11 cout << MOD << endl; 12 cout << 1e9+7 << endl; 13 14 return 0; 15}

というコードをコンパイルして実行すると、結果は以下のように表示されます。

1000000007 1000000007 1e+09 1e+09

この結果を見ると、指数記法「e」は変数に格納しないと使うことができないように思えます。
しかし、以下のようにキャストすると、「1000000007」と表示されるようになります。

C++

1 cout << int(MOD) << endl; 2 cout << int(1e9+7) << endl;

このことから、eには特別な文法があるのではないかと思います。ですが、ネットで検索してもなかなかそれについて書いてあるものが見つかりません。eの記法、またはそれに関する記事があれば教えていただきたいです。

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

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

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

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

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

guest

回答3

0

こんにちは。

単に浮動小数点で処理するか整数で処理するかの差です。

coutは<<演算子へ与えた変数や定数の型に応じて適切な表示形式で表示します。
整数は(当たり前ですが)小数表記はしません。
浮動小数点の場合は、桁数により、e(指数表記)や.(小数表記)します。
1e9+7の型は浮動小数点(double型)になります。

投稿2017/09/23 04:41

編集2017/09/23 04:41
Chironian

総合スコア23272

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

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

nomi

2017/09/23 11:01

回答頂きありがとうございます! 回答の中に書いてある「浮動小数点の場合は、桁数により、e(指数表記)や.(小数表記)します。」という文章の意味が分りません。よろしければ詳しく教えて頂けないでしょうか?
nomi

2018/04/17 07:27

1e9のような記法で書くと、その数値自体が浮動小数点数になるというわけではないのですか?
Chironian

2018/04/17 16:34

1e9は浮動小数点型(double型)になります。 int i=1e9;とした場合でも、iは整数型(int型)であり、double型にはなりません。 従って、iに入っている値も整数型です。 例えば、int i=1.5;とした時、iには1が入りますよ。
gaya-K

2018/04/20 23:48 編集

横から失礼します。 質問者さんが腑に落ちなければ、1e9 の部分を 1e50 とか 1e-1 に変えてみるのがいいと思います。
guest

0

勘違いしてはいけないけど、
たんに文字列変換するときにそう表示されるってだけの話で、
int 型を文字列変換すればそうなって、
float/double型を文字列変換すればそうなるってだけのはなしだということですね。

指数記法「e」は変数に格納しないと使うことができないように思えます。

変数に格納しなくても正常に表示されてますが


いろいろやってみると、、

C++

1int main() 2{ 3 printf("%lf\n", 1e9 + 7); 4 printf("%le\n", 1e9 + 7); 5 cout << (int)(1e9 + 7) << endl; 6 cout << 1e9 + 7 << endl; 7 cout << 1e9 + 7000 << endl; 8 9 while (1); 10 return 0; 11} 12 13} 14 15

1000000007.000000
1.000000e+09
1000000007
1e+09
1.00001e+09

よけいややこしい結果にw

投稿2018/04/21 00:58

編集2018/04/21 01:34
y_waiwai

総合スコア87747

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

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

0

C++で見つからない場合は
https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E/%E8%A8%98%E6%B3%95#%E5%AE%9A%E6%95%B0
C言語の方で探しましょう。

同じ部分が多いので、C++の解説には書いてないことが多い。

投稿2018/04/20 22:48

編集2018/04/20 22:52
PingHermit

総合スコア478

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問