ToSysop

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ ToSysop ] in KIDS
글 쓴 이(By): staff (KIDS기술진)
날 짜 (Date): 2004년 6월 21일 월요일 오후 02시 22분 35초
제 목(Title): Re: 바이오리듬 이상해요..


도움을 요청합니다. 
기존 UltraSparc SunOS 5.6에서 동작하던 소스를 
     x86 SunOS 5.7로 포팅한 후 바이오리듬의 동작이 이상해졌습니다.
원인은, libm의 sin()함수의 입력이 degree에서 radian으로 바뀌었는데, 이것을 
적용한 결과치가 웹에서 흔히 볼 수 있는 바이오리듬의 값과 다르게 나옵니다. 

아래 계산이 정확한지 검토 부탁드립니다. 
아래 소스에서 제가 수정한 부분은 sin함수의 내부에서 
'* 360'을  '* 2 * PI'로 변경한 부분 뿐입니다. 
PI는 3.141592654로 define되어 있습니다. 

현재 Game메뉴의 바이오리듬은 아래 소스로 변경된 상태입니다 
(다시 로긴하여 확인하시기 바랍니다. )

우선 바이오리듬 함수의 주요 부분입니다. 
    tim = time(0);
    tmt = localtime(&tim);
    thisyr = tmt->tm_year;
    thismon = tmt->tm_mon + 1;
    thisday = tmt->tm_mday;

    thisday = 0;            /*** DIsplay Month's BIorythme **/
    totalday =
        date(thisyr, thismon, thisday) - date(birthyr, birthmon, birthday);

-----생략-----
    for (thisday = 1; thisday < 34; thisday++) {
->      count = 11. * sin((double)(totalday + thisday) / 23. * 2.*PI );
        output[thisday][10 - count] = 'p';
->      count = 11. * sin((double)(totalday + thisday) / 28. * 2.*PI );
        output[thisday][10 - count] = 'e';
->      count = 11. * sin((double)(totalday + thisday) / 33. * 2.*PI );
        output[thisday][10 - count] = 'i';
    }

다음은 date함수입니다. 
date(yr, mon, day)
    int             yr, mon, day;
{
    long            sum;
    long            subsum;

    subsum =
        (yr - (yr / 4) * 4 == 0) - (yr >= 1600) * (yr - (yr / 100) * 100 ==
                                                   0) - (yr -
                                                         (yr / 400) * 400==
                                                         0);
    sum = (double)yr * 365.2425 - (double)subsum;
    sum =
        sum + ((mon > 1) + (mon > 3) + (mon > 5) + (mon > 7) + (mon > 8) +
               (mon > 10)) * 31 + ((mon > 4) + (mon > 6) + (mon > 9) + 
       (mon >11)) *
        30 + (mon > 2) * (28 + subsum);
    sum = sum + day;
    return (sum);
}

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.