2의 50승을 구하는 소스인데 출력값이 0이 되어버리네요..ㅠㅠ

nexusz99의 이미지

#include <stdio.h>
int main()
{
	unsigned __int64 a = 1,i;
	FILE* fp;
	fp = fopen("c:\\test.txt","w+");
	if(fp != NULL)
		printf("파일 생성 성공!\n");
	else{ printf("파일 생성 실패\n"); return 0;}
	for(i=1;i<=50;i++)
		a = a * 2;
	fprintf(fp,"%d",a);
	printf("연산 완료\n");
	fclose(fp);
	return 0;
}

%d 에 문제가 있는거 같은데 %d는 어떤 반환값을 받는거에요?

아..그리고 디버깅으로 차례차례 돌려봤을 경우 2^25 까진 잘 계산되는데 그 이후로는 0이 되어버리네요.ㅠ

------추가질문---------

63승까지는 계산이 되는데 그 이후로는 안되네요..ㅠㅠ

범위를 넘어서네요..

어찌해야하죠

cppig1995의 이미지

%d -> %I64u (대문자 i입니다.)

그런데 VC++6보다 높은 버전인 경우 표준 unsigned long long, %llu를 사용하시기 바랍니다. (소문자 L입니다.)

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

nexusz99의 이미지

63승 까지는 출력이 되는데.. 그 이상은 안되네요..

역시 64비트범위를 넘어서는데 어찌해야하죠.ㅠㅠ
----------------------------------------
뻘짓도 일이다.

뻘짓도 일이다.

helloneo의 이미지

이런걸 쓰면 되죠..~~

http://shygypsy.com/tools/BigInt.cpp

WHAT'S UP

nexusz99의 이미지

복 붙 했더니 오류가 13개.ㄷㄷ

뻘짓도 일이다.

AuXo의 이미지

곱하기 연산은 당연히 shift + add로 이루어집니다.

7 * 3 이란 연산이 있다고 하면

111 * 11 의 2진 연산이고

00111
* 011
------------
00111
0111
------------
10101

로 계산이 되죠.. (별로 안이쁘게 그려지네요--)

이런 절차를 통해.. 루프를 돌려서 shift + add로 연산하면 되겠습니다.. 좋은 방법은 아니고 cpu의 원론적인 방법이죠..

중간에 booth encoding 같은 방법을 통해 연산량을 줄일 수도 있고..

아 물론 이렇게 해도 한 변수 안에 2^64까지 들어가는 것은 아닙니다.

상위 바이트를 나타내는 uint64를 하나 더 설정한 이후, flag register의 overflow bit 등을 참조하여 연산이 가능할 것입니다.

하지만 이렇게 하면 또 문제가 화면에 출력해 주는 일이죠.. 변수 두개에 나눠져있으니..

위 연산들과 비슷한 방법으로 진행하되 출력가능한 범위만큼 데이터를 쪼개서 연산하면 될 것 같긴 합니다..

모두 실행속도를 보장해 주긴 힘들겠네요 :(

다시 생각해보니 이러한 방법도 있을 수 있습니다.

버퍼에 숫자를 10진 문자열로 쭉 넣고..

예를 들어 327 * 13 이라면

char szMultiplicand[1024];
szMultiplicand[1023] = '7';
szMultiplicand[1022] = '2';
szMultiplicand[1021] = '3';

char szMultiplier[1024];
szMultiplier[1023] = '3';
szMultiplier[1022] = '1';

char szCarry[1024];

예.. 10진수 계산한듯 스트링 가지고 뻘짓을 하는거죠.. 스트링을 문잘 바꿔서 곱한다음에 carry 세팅하고 자신 값을 다시 스트링으로..

역시나 좋은 연산속도를 보장하긴 힘들겠죠..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.