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

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

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

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

Q&A

2回答

6009閲覧

浮動小数点演算と整数型演算

token_regain

総合スコア25

C

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

0グッド

1クリップ

投稿2015/07/26 05:58

編集2015/07/26 05:59

C初心者です。

作成したプログラムひたすら乗算するプログラムでループをint型とdouble型で回すことがあったのですが、
計算スピードが明らかに違ったためなぜこの違いが生まれるのかという疑問が生まれました。

例えば乗算において計算アルゴリズムとしてbitレベルでは
intとdoubleではどのように演算が行われてこの違いが生じるのでしょうか。

宜しくお願いいたします。

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

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

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

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

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

guest

回答2

0

ざっくり説明すると、CPUが演算すると、
int型は、メモリの整数値を汎用レジスタに格納して演算する。
double型は、メモリの浮動小数点数をFPUレジスタ(浮動小数点演算に使われるレジスタ)に格納して演算する。

CPUの命令毎に必要なクロック数ってのが決まっていて、
double型のほうが必要なクロック数が多い(処理時間がかかる)ので、
計算スピードに時間がかかる。ってことですね。

CPUのアーキテクチャとかに依存するので、詳しい人からすれば、
細かな部分で色々突っ込みがあるかと思いますが、最初はこんな
認識で良いと思います。

投稿2015/07/26 07:00

horohoro

総合スコア490

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

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

0

整数型と実数型の内部表現の違いによるものです。

整数型: 符号部、仮数部
実数型: 符号部、指数部、仮数部 からなります。
2×(-5) の場合
整数型は、符号部(+)×(-) と仮数部2×5 の2段階で計算します。
実数型では
+2.0 = (+) 1.0 ×(2の1乗)
ー5.0 = (ー) 1.01 ×(2の2乗)
の形式で保持されています。(1.01 ×(2の2乗)は5の2進数表現 101 をずらしたものです。)
符号部(+)×(-) 、仮数部1.0×1.01、指数部(2の1乗)×(2の2乗)の3段階で計算します。
計算手順が1つ多くなるので処理時間も多くかかりますね。

数値表現はコンピュータ科学の基礎ですので、お勉強されることをお勧めします。

投稿2015/07/27 01:35

mie

総合スコア229

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問