C言語関係掲示板

過去ログ

No.264.1から15までの三乗根解く

[戻る] [ホームページ]

No.1589

三乗根に関する質問を読んで
投稿者---dense(2002/05/23 02:39:31)


こんばんは。nepiaさんの質問で三乗根に関する質問をされていたのですが、三乗根を解く関数をつくり、1から15までの三乗根解くにはどーすればよいのでしょうか?nepiaさんの質問の答えを読んでみたのですがよく分かりませんでした。教えてください

No.1655

Re:三乗根に関する質問を読んで
投稿者---かずま(2002/06/03 22:09:33)


> 三乗根を解く関数をつくり、1から15までの三乗根解くにはどーすればよいのでしょうか?
#include <stdio.h>
#include <math.h>

typedef struct {
#ifdef BIG_ENDIAN
    unsigned long s:1, e:11, m1:20, m2:32;
#else
    unsigned long m2:32, m1:20, e:11, s:1;
#endif
} IEEE;

double cubic_root(double a)
{
    double x;  IEEE *p;
    int minus = 0, expo, i;

    if (a == 0)
        return 0;
    if (a < 0)
        minus = 1, a = -a;
    p = (IEEE *)&a;
    expo = p->e / 3 - 341;
    p->e = p->e % 3 + 1023;
    x = a;
    for (i = 0; i < 9; i++)
        x = (a/(x*x) + 2*x) * (1.0/3.0);
    p = (IEEE *)&x;
    p->e += expo;
    return minus ? -x : x;
}

int main()
{
    double a;

    for (a = 1; a <= 15; a++)
        printf("%3.0f: %-20.16f %-20.16f\n", a, cubic_root(a), pow(a, 1./3));
    return 0;
}