![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
テント写像のプログラムについて質問です。
下記のプログラムにて
「テント写像の頂点位置を順次変えていき、その頂点のx座標値より大きいなら「1」小さいなら「0」をカウントし、最終的に、各x、yの値に置ける1と0の個数を表示する」
というプログラムを作ったのですが、明らかに計算回数(#define Nの値です)よりも多い値が出力されてしまい困っています。
皆様のお力で解決してもらえないでしょうか?
--------以下問題のプログラム----------
#include <stdio.h>
#include <math.h>
#define x0 0.10
#define N 100
main()
{
FILE *pt; /* ファイルポインタ */
double i,j;
double x,u=0;
double data;
int k;
int data1,data0;
data1=0;data0=0;
if((pt = fopen("tent_kosu2.dat","wt")) !=NULL){ /* ファイルオープン*/
for(i=0.1;i<=1;i+=0.1){ //xの刻み
for(j=0.9;j<=1;j+=0.01){ //yの刻み
for(k = 0, x=x0; k <= N; k++){
u = (j/ i);
x = 1.0-fabs(1.0-u*x); /* テント写像 */
data=x-i;
if(data>0){data1++;}
else if(data<0){data0++;}
if(k%N==0){/*計算回数が100回1セットなので1セット終了毎の個数を表示させる*/
fprintf(pt,"0は%d個 1は%d個¥t x=%5.2f y=%5.2f¥n",data0,data1,i,j);}/* ファイル書き込み */
}
}
}
}
}
fclose(pt); /* ファイルクローズ*/
}
---------ここまで-------
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> main()
ちゃんと、型とか宣言するようにしましょう。
> for(i=0.1;i<=1;i+=0.1){ //xの刻み
> for(j=0.9;j<=1;j+=0.01){ //yの刻み
0.1,0.01等は誤差を含んでいます。
0.1+0.1+0.1+....
とすることで、誤差が大きくなります。下手すると、ループ回数が変わってしまいます(この例程度なら大丈夫だと思いますが)
精度を上げるためには、整数でループ→計算で実数に が推奨されます
/* 例:10倍して整数でループ→使用する値は0.1倍して実数に */
int i0;
for(i0=1;i0<=10;i0++){
i=i0 * 0.1;
質問の答えは、たぶん、data0,data1のリセットのタイミングの問題だと思いますが、#1にあるようにどうとでも取れる文章なのでわかりません
No.2
- 回答日時:
k%N==0 は k が 0 でも N でも成り立ちます。
普通は
for(k = 0, x=x0; k < N; k++){
(略)
}
fprintf(pt,"0は%d個 1は%d個\t x=%5.2f y=%5.2f\n",data0,data1,i,j);
と書きます。
No.1
- 回答日時:
「計算回数よりも多い値が出力される」とはどういう意味でしょうか?
「出力される値が計算回数より大きい」 (たとえば「最大でも 100 までしか出力されない」はずなのに 176 のような数値が出力される) ということ? それとも, 「出力される値の個数が計算回数より多い」 (たとえば「100個しか出力されない」はずなのに 193個出力される) ということ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの時刻の形式について
-
accessでクエリをExcelにエクス...
-
COBOL FILLER
-
AccessのレポートからPDFをペー...
-
コマンドプロンプトのテキスト...
-
iTextでPDFを表示させたら日本...
-
クエリをエクセルファイルへの出力
-
全てのグリフの一覧を出力する...
-
エクセルVBAでMHTMLで保存したW...
-
COBOL、項目末尾に空白がある場...
-
RICOH C455 アドレス出力について
-
squidについて
-
FASMのコンパイラオプション
-
FTP受信が不調
-
Aviutl音声ファイルについて
-
ACCESS2002(or2003)の日付表示...
-
ショートカットで起動した場合...
-
Thunderbird 受信メールからの...
-
エクセルVBAでフォルダ内に...
-
アクセス→エクセルへエクスポー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
COBOL、項目末尾に空白がある場...
-
ショートカットで起動した場合...
-
Thunderbird 受信メールからの...
-
Acrobat参照設定
-
コマンドプロンプトのテキスト...
-
AccessのレポートからPDFをペー...
-
accessのリポートを、excelに出...
-
Excel で「OLE は現在使用でき...
-
ファイナルカットで編集した動...
-
COBOL FILLER
-
VB6.0でExcel,PDF,Word出力方法
-
“ファイルに出力”した印刷ファ...
-
WshShellから起動したbat(ftp)...
-
エクセルVBAでMHTMLで保存したW...
-
エクセルが裏で動いたままなん...
-
excel vbaでのxml出力がわかり...
-
PHP:unzipコマンドにおけるエ...
-
Fortranでの出力ファイル
おすすめ情報