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

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

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

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

Q&A

解決済

3回答

1351閲覧

printf がうまくいかない

sakamon

総合スコア13

C

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

0グッド

0クリップ

投稿2016/04/20 12:58

フェボナッチ級数を永遠に書きたいだけのプログラムなのに
実行結果が

inf
inf
inf
.
.
.
.
となってしまいます

C

1#include <stdio.h> 2 3int main(){ 4 float f1=1.0; 5 float f2=1.0; 6 float f=0; 7 int i; 8 9 for(i=3;;i++){ 10 f=f1+f2; 11 f1=f2; 12 f2=f; 13 printf("%f\n",f); 14 } 15 return 0; 16}

ubuntのgccでコンパイルしました
おねがいします

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

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

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

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

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

guest

回答3

0

ベストアンサー

C言語では扱える数に限りがあるため「永遠に」というのは不可能です。計算結果が一定値を超えるとオーバーフローを起こしてinfと表示されるようになっています。

for(i = 3; i < 100; i++){
このように回数制限を付けると計算自体は正しくできていることが判ると思います。

また、floatよりもdoubleの方が扱える数が大きいので、そちらを使ってみてはどうでしょうか。

投稿2016/04/20 13:28

catsforepaw

総合スコア5938

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

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

sakamon

2016/04/20 15:03

回答ありがとうございます オーバーフローしたらinfと表示されるのは知らなかったです 改善策を利用させていただきます
guest

0

GMPライブラリを使えば簡単に多倍長演算ができます.

  • インストール: sudo apt-get install libgmp3-dev
  • コンパイル: gcc -lgmp example.c

c

1#include <stdio.h> 2#include <gmp.h> 3 4int main(void) 5{ 6 mpz_t a, b, c; 7 unsigned long long i = 0ULL; 8 9 mpz_init(a); mpz_init(b); mpz_init(c); 10 mpz_set_ui(a, 1UL); mpz_set_ui(b, 1UL); 11 12 printf("%010llu: ", ++i); mpz_out_str(stdout, 10, a); printf("\n"); 13 printf("%010llu: ", ++i); mpz_out_str(stdout, 10, b); printf("\n"); 14 15 while (1) { 16 mpz_add(c, a, b); 17 mpz_set(a, b); 18 mpz_set(b, c); 19 printf("%010llu: ", ++i); mpz_out_str(stdout, 10, c); printf("\n"); 20 } 21 22 mpz_clear(a); mpz_clear(b); mpz_clear(c); 23 return 0; 24}

【1〜】

イメージ説明

【400〜】

イメージ説明

【800〜】

イメージ説明

投稿2016/04/20 15:36

編集2016/04/20 15:43
mpyw

総合スコア5223

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

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

0

こんにちは。

手元のMinGW(Windows版gcc)でやってみました。
単にオーバーフローしているだけのようです。
標準出力をファイルへリダイレクトして実行してみると分かりますが、最初の方はそれっぽい数値がでてます。

投稿2016/04/20 13:21

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問