큰 값을 읽어오거나 파일로 쓰려면 어떻게 해야하나요?

ktlsu1231의 이미지

Quote:

0.985459 3.42E-07 0.00711861 0.0131221 0.00358045 0.000269459 4.81E-05 0.00107752
1.77E-05 0.984542 0.00574365 0.000188079 3.31E-06 0.00336054 0.0110688 0.00109913
0.00200072 0.00237169 0.983314 0.00391201 1.42E-05 7.63E-07 0.00506869 0.000634359

연산된 출력값인데 파일에 저장을한 후에 나중에 다시 읽어오려고 합니다.
헌데 아래와 같이 파일에 입력이 되는 것들이 있습니다.

Quote:
111835596048154550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000

코드는 아래와 같습니다. %f 로 출력을 했는데 위와 같이 되는 녀석이
있네요.

int MPerceptron::writeWeightEpoch(int epochCount)
{
	FILE *fp;
	if((fp=fopen("./EpochWeightData.txt","w"))==NULL)
               {cout << "꿱=========="<<endl;return 0;}
	
	fprintf(fp, "%d\n", epochCount); //EpochCount 
	
	for(int nodeNo=0; nodeNo< outputLayerNodE; nodeNo++){ //getHOweight
		for(int nodeNo1=0; nodeNo1< hiddenLayerNodE; nodeNo1++){
			fprintf(fp, "%f\n", getHOweight(nodeNo, nodeNo1));
		}
		fprintf(fp, "\n");
	}
	fprintf(fp, "\n");

	for(nodeNo=0; nodeNo< hiddenLayerNodE; nodeNo++){ //getIHweight
		for(int nodeNo1=0; nodeNo1< inputLayerNodE; nodeNo1++){
			fprintf(fp, "%f\n", getIHweight(nodeNo, nodeNo1));
		}
		fprintf(fp, "\n");
	}
	
	fclose(fp);
	return 1;
}

이렇게 롸이트 되면 나중에 읽어올 때도 문제가 될 것 같아서 어떻게 해야 좋을지 모르겠습니다.
도와주세요. ^^;

galadriel의 이미지

%e옵션을 사용해서 지수형식으로 표시해야 될것 같은데요.

galadriel in the tower of elves

체스맨의 이미지

fprintf(fp, "%f\n", getHOweight(nodeNo, nodeNo1));

이부분에서 아마도 getHOweight 는 정수형을 리턴하는 함수가
아닌지요? 이 경우라면 (double)getHOweight(어쩌구...)
와같이 캐스팅해서 fprintf 인자로 해야 합니다.

아니면 그 함수가 float 나 double 을 리턴하긴 하는데, 호출 전
프로토타입을 제대로 선언하지 않으셨던가요.

지금 올리신 정도로는 이 정도 예측이 가는군요.

Orion Project : http://orionids.org

ktlsu1231의 이미지

안녕하세요.

이와 같은 코드로

int MP::inputWeightValue() //최적 웨이트 값을 읽음
{
	FILE *fp;          
	double value=0.0;

	if((fp=fopen("./WeightData.txt","rt"))==NULL) return 0;

	for(int nodeNo=0; nodeNo< outputLayerNodE; nodeNo++){ //getHOweight
		for(int nodeNo1=0; nodeNo1< hiddenLayerNodE; nodeNo1++){
			fscanf(fp, "%e", &value);
			setHOweight(nodeNo, nodeNo1, value);
			cout << getHOweight(nodeNo, nodeNo1);
		}
	}

	for(nodeNo=0; nodeNo< hiddenLayerNodE; nodeNo++){ //getIHweight
		for(int nodeNo1=0; nodeNo1< inputLayerNodE; nodeNo1++){
			fscanf(fp, "%e", &value);
			setIHweight(nodeNo, nodeNo1, value);
			cout << getIHweight(nodeNo, nodeNo1);
		}
	}

	fclose(fp);
	return 1;
}

Quote:

1.516067e+000
1.604979e-001
-2.316769e+000
8.289150e-001
-8.358234e-001
-3.121768e+000
7.978222e-001
-3.395014e+000
-8.777984e-001
4.546963e-001
1.583715e-001
3.743837e-001
4.013624e-001
7.135855e-001

이런 천여개의 숫자를 입력 받으려 했습니다.

출력결과(읽혀 들어온 모양)

Quote:

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000

이 모양으로 나옵니다. T_T
어떻게해요.. 흑흑..
doldori의 이미지

이건 저도 전에 당했던 문젠데, scanf 계열에서

float는 "%e"를, double은 "%le"를 쓰면 되더군요.

이런 서식 맞추기도 귀찮고 변수 타입 검사도 안되고 해서

printf/scanf 류의 함수를 무척 싫어합니다.

C++을 쓰신다면 stream 계열이 낫지 않을까요?

ktlsu1231의 이미지

되었어요.. ^^

정말 정말 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.