首页 > 代码库 > 实现sqrt()函数
实现sqrt()函数
求一个正数N的开方, 并且可以指定精度, 要求不能用库函数sqrt
方法一:如下所示,先求sqrt(N)的整数部分,再求小数点后1位,2位 ... ...
方法二:牛顿迭代法,根据公式 Ai+1 = (Ai+number/Ai)/2 ,其中Ai 的初始值,即A1任取,如1,2,3 ...
// 求一个正数N的开方, 并且可以指定精度, 要求不能用库函数sqrt#include <stdio.h>#include <stdlib.h>double my_sqrt2(double number, int point){ double new_guess; double last_guess; if (number < 0) { printf("Cannot compute the square root of a negative number!\n"); return -1; } printf("Method 2:\n"); new_guess = 1; do { last_guess = new_guess; new_guess = (last_guess + number/last_guess) / 2; printf("%.*lf\n", point, new_guess); } while (new_guess != last_guess); return new_guess;}double my_sqrt1(double n, int point){ if (n < 0) { printf("Cannot compute the square root of a negative number!\n"); return -1; } int i,j; for( i=1; i-n<0; i++ ) // 求得i的开方的整数部分 if( i*i-n > 0 ) break; double answer = i-1; double incr = 0.1; for( j=1; j<=point; j++) // 第j次循环,求得i的开方的小数部分的第j位 { for( i=1; i<10; i++ ) { answer += incr; if( answer*answer-n > 0 ) break; } answer -= incr; incr /= 10; } incr *= 10; printf("Method 1:\n"); printf("sqrt(%lf) is between %.*lf - %.*lf\n", n, point, answer, point, answer+incr); return answer;}int main(void){ int point; double n; printf("请输入正整数N: "); scanf("%lf",&n); printf("请输入精确到小数点后的位数: "); scanf("%d",&point); my_sqrt1(n,point); my_sqrt2(n,point); return 0;}
实现sqrt()函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。