| [ 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); } |