根号について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
えんぴつ

根号について

#1

投稿記事 by えんぴつ » 13年前

C言語初心者です。
解の公式を求めるプログラムを作りたいのですが、根号の部分をどうすればいいのかわからなく、止まっています。
根号をどうやって計算させるのかがわかりません。

初歩的な質問ですいませんが、教えてください・・・

jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

Re: 根号について

#2

投稿記事 by jay » 13年前

C言語の標準ライブラリの一つであるmath.hの中に便利な関数があったはずです

詳しくはこの辺を見るなりGoogle先生に聞いてみるなりしてください
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 根号について

#3

投稿記事 by みけCAT » 13年前

二分探索で求めることができます。

コード:

#include <stdio.h>

double getRoot(double target) {
	double left,right,mid;
	if(target<0)return -1;
	left=0;right=(target<1?1:target);
	while(1) {
		mid=(left+right)/2;
		if(mid*mid<=target) {
			if(left==mid)break;
			left=mid;
		} else {
			if(right==mid)break;
			right=mid;
		}
	}
	return mid;
}

int main(void) {
	double input;
	while(1) {
		fprintf(stderr,"数を入力(負の数で終了):");
		scanf("%lf",&input);
		if(input<0)break;
		printf("√%f==%.15f\n",input,getRoot(input));
	}
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: 根号について

#4

投稿記事 by かずま » 13年前

二分探索より、ニュートン法の方が終息が速いのと、
mathライブラリにはたくさんの関数があるということで。

コード:

#include <stdio.h>
#include <math.h>  // fabs, sqrt, pow, exp, log

double sqrt_newton(double a)
{
    double x = 1, d;
    if (a <= 0) return a;
    do {
        d = (x - a / x) * 0.5;
        x -= d;
    } while (fabs(d / x) > 1e-15);
    return x;
}

int main(void)
{
    double a;
    while (printf("> "), scanf("%lf", &a) == 1 && a >= 0)
        printf("sqrt(%.15g): %.15g, %.15g, %.15g, %.15g\n", 
            a, sqrt_newton(a), sqrt(a), pow(a, 0.5), exp(log(a)/2));
    return 0;
}

かずま

Re: 根号について

#5

投稿記事 by かずま » 13年前

かずま さんが書きました:二分探索より、ニュートン法の方が終息が速いのと、
「収束」の誤変換でした。
解が求まるまでのループの回数が少ないということです。

閉鎖

“C言語何でも質問掲示板” へ戻る