指数を含むファイルの読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
median

指数を含むファイルの読み込み

#1

投稿記事 by median » 9年前

テンプレに沿って質問したいと思います。よろしくお願いします。

[1] 質問文
 [1.1] 自分が今行いたい事は何か
 以下のようなRのプログラムから出力された指数が混ざったtxtファイルの値を読み込めるようにしたいです。
-0.01296498 -0.01695993 -0.03888373 -0.01391935 -0.01312849
-0.02702044 0 0 -2.757055e-05 -0.000951184
 
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
fscanf関数を用いて以下の形式で読み込んだところ問題が起きました。 
fscanf(ファイル名,"%lf ",格納する配列(double));

 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
 指数部分の値がおかしいです。(上の例だと-2.757055e-05が-0.000028と異なった値で出力される)
 
 [1.4] 今何がわからないのか、知りたいのか
上記のようなファイルを読み込むための手段があれば知りたいです。

[2] 環境  
 [2.1] OS : WindowsXP
 [2.2] コンパイラ名 : VS2005

[3] その他
 ・どの程度C言語を理解しているか
 学校の授業で習ったレベルです。

以上のようになります。よろしくお願いします。

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 指数を含むファイルの読み込み

#2

投稿記事 by みけCAT » 9年前

%gを使います。

コード:

#include <stdio.h>

int main(void) {
	FILE* fp;
	double in;
	fp=fopen("input.txt","r");
	if(fp==NULL)return 1;
	while(fscanf(fp,"%lg",&in)!=-1)printf("%g\n",in);
	fclose(fp);
	return 0;
}
実験の都合上fscanfになっていますが、scanfでもいいと思います。
http://9cguide.appspot.com/r_mark.html
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

median

Re: 指数を含むファイルの読み込み

#3

投稿記事 by median » 9年前

みけCATさん
無事ファイルの値を読み込むことができました。

もしよろしければもう一つお尋ねしたいのですが
先ほどのプログラムで以下のようにデータの和を求める場合はどうすればいいのでしょうか?

以下のプログラムでは指数部分の値が-0.000028として扱われてしまい、正しい値が出力されませんでした。

手元の関数電卓で計算した値は
-0.1423583082
となります。(計算ミスがなければですが(汗))

お時間がありましたら返信いただけるとありがたいです。
ご回答ありがとうございました。

コード:

  
#include <stdio.h>
 
int main(void) {
    FILE* fp;
    double in;
	double test = 0;
    fp=fopen("input.txt","r");
    if(fp==NULL)return 1;
	while(fscanf(fp,"%lg",&in)!=-1){
		printf("%g\n",in);
		test = test + in;
	}
    fclose(fp);
	printf("test = %g\n",test);
    return 0;
}

maru
記事: 150
登録日時: 9年前

Re: 指数を含むファイルの読み込み

#4

投稿記事 by maru » 9年前

median さんが書きました:以下のプログラムでは指数部分の値が-0.000028として扱われてしまい、正しい値が出力されませんでした。

手元の関数電卓で計算した値は
-0.1423583082
となります。(計算ミスがなければですが(汗))
わたくしの手計算では -0.12385567455 でプログラムでは

コード:

-0.012965
-0.0169599
-0.0388837
-0.0139194
-0.0131285
-0.0270204
0
0
-2.75706e-005
-0.000951184
test = -0.123856
と表示されましたよ。特にプログラムが間違っているようには思えません。

median

Re: 指数を含むファイルの読み込み

#5

投稿記事 by median » 9年前

maruさん
返信ありがとうございます。
以下のサイトでコピーペーストした値で計算を行ったところ(自動で四捨五入されますが)-0.12…にはならなかったので確認をしたいのですが

2.75706e-005の指数部分e-005というのはeの-5乗という意味であってますか?
そのあたりの知識があいまいなので教えていただけるとありがたいです。

http://tomari.org/main/java/dentaku_kansuu.html

計算式と結果
-0.012965-0.0169599-0.0388837-0.0139194-0.0131285-0.0270204-0.000951184-2.75706*exp(-5)=-0.14240500815329857

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 指数を含むファイルの読み込み

#6

投稿記事 by みけCAT » 9年前

exp(-5)はe(≒2.71828)の-5乗だと思います。
すなおに/100000としてみたらどうですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 指数を含むファイルの読み込み

#7

投稿記事 by みけCAT » 9年前

e-005は*10^-5のことだと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

median

Re: 指数を含むファイルの読み込み

#8

投稿記事 by median » 9年前

みけCATさん

eはexpではなかったのですね。勘違いしてました。

おかげさまで、無事プログラムを作ることができました。
いろいろ教えていただきありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る