math 계열 함수 구현

leilei의 이미지

math 계열 함수만 넣으면 컴파일이 안돼서 삽질을 했더니만..
보드 업체쪽에서 아직 math 계열을 사용할 수 없다고 하네요.. -_-a

어디 공개된 math 계열 함수들이 없을까요?
sin(), cos().. sqrt() 정도만 사용하면 되는데요..

여기저기 뒤져보고 있는데 마땅한 것이 없네요.

simple하고 멋진 놈 있으면 소개 부탁 드립니다..

seoleda의 이미지

leilei wrote:
math 계열 함수만 넣으면 컴파일이 안돼서 삽질을 했더니만..
보드 업체쪽에서 아직 math 계열을 사용할 수 없다고 하네요.. -_-a

어디 공개된 math 계열 함수들이 없을까요?
sin(), cos().. sqrt() 정도만 사용하면 되는데요..

여기저기 뒤져보고 있는데 마땅한 것이 없네요.

simple하고 멋진 놈 있으면 소개 부탁 드립니다..

초월함수는 테일러 급수를 이용하여 다항함수로 근사시킬 수 있습니다.

직접 구현하셔도 그리 어렵지 않습니다.
다음은 제가 레포트로 짰던 sin 함수 구현입니다. 참고하세요~

<?
    function factorial($number){
        $result=1;
        for ($i=1; $i<=$number; $i++){
            $result = $result * $i;
        }
        return $result;
    }
    function my_sin($x){
        $result = $x  - pow($x,3)/factorial(3)
                + pow($x,5)/factorial(5) - pow($x,7)/factorial (7)
                + pow($x,9)/factorial(9) - pow($x,11)/factorial(11)
                + pow($x,13)/factorial(13) - pow($x,15)/factorial(15)
                + pow($x,17)/factorial(17) - pow($x,19)/factorial(19);
        return $result;
    }

    $temp = my_sin(M_PI);
    $foo = sin(M_PI);

    echo "my_sin $temp sin $foo";
?>
saxboy의 이미지

sin(), cos()은 테이블을 이용하시는 것이 좋지 않을까요.

익명 사용자의 이미지

임베디드 환경이신것 같습니다만...
saxboy님 말씀처럼 테이블을 이용하는 방법도 괜찮을 것입니다. 별로 오차를 따지지 않는 다면 말입니다. 소수점 이하 몇 번째 숫자가 오차를 발생시킬 수 있는 환경이 아니라면 추천드립니다. 대부분의 환경에서는 괜찮겠죠 ^^;

테이블을 사용하시면 int 만 갖고도 굉장히 빨리 연산하실 수 있을 겁니다.
테이블 크기도 줄일 수 있습니다. sin(), cos()는 주기가 있지 않습니까? 간단한 연산으로 테이블을 1/4로 만들 수도 있습니다.

doldori의 이미지

sin과 cos는 둘 중의 하나만 구현하면 나머지는 관계식으로 구할 수 있겠죠.
테일러 급수든 테이블 방식이든 적당한 것을 택해서 임의의 각도를 0~pi/2 범위로
환산해서 계산하면 되겠네요.
그런데 sqrt는 테일러 급수로는 무리가 있겠군요. 1 부근에서 전개해야 하는데
1보다 훨씬 큰 수에 대해서 계산하려면 몇 항까지 해야 할지 정하기가 어렵죠.
factorial을 계산해야 하는 부담도 있고요. 이것은 Newton-Rhapson 법을
쓰면 어떨까 합니다. sqrt(a)를 계산한다면

for initial value x0 and tolerance
do {
    delta_x = (a/x0 - x0) / 2;
    x0 += delta_x;
} while (fabs(delta_x) > tolerance);

계산이 간단한 데 비해 수렴 속도는 꽤 빠릅니다.
cdpark의 이미지

leilei wrote:
math 계열 함수만 넣으면 컴파일이 안돼서 삽질을 했더니만..
보드 업체쪽에서 아직 math 계열을 사용할 수 없다고 하네요.. -_-a

기계어 차원에서 math 함수를 지원하지 않는 CPU인가요? 보드 업체에서 넣지 않았다는게 무슨 뜻인지... -_-;;

댓글 달기

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