详细解析C语言中的开方实现_C 语言

关于C语言中的开方计算,首先想到的当然是sqrt()函数,让我们先来回顾一下它的基本用法:
头文件:#include <math.h>

sqrt() 用来求给定值的平方根,其原型为:

  double sqrt(double x);

参数

x 为要计算平方根的值。

如果 x < 0,将会导致 domain error 错误,并把全局变量 errno 的值为设置为 EDOM。

返回值

返回 x 平方根。

注意,使用 GCC 编译时请加入-lm。

实例计算200 的平方根值。

#include <math.h>
main(){
  double root;
  root = sqrt(200);
  printf("answer is %f\n", root);
}

输出结果:
answer is 14.142136

题目
求整数N的开方,精度在0.001

二分法
若N大于1,则从[1, N]开始,low = 1, high = N, mid = low + (high - low) >> 1开始进行数值逼近

若N小于1,则从[N, 1]开始,low = 0, high = N, mid = low + (high - low) >> 1开始进行数值逼近

ac代码

 /**
   * 创新工厂2014年校招算法题目,求整数N的开方,精度为0.001
   */ 

  #include <stdio.h>
  #include <stdlib.h>
  #include <math.h> 

  #define ACCURACY 0.001 

  double newSqrt(double n)
  {
    double low, high, mid, tmp; 

    // 获取上下界
    if (n > 1)  {
      low = 1;
      high = n;
    } else {
      low = n;
      high = 1;
    } 

    // 二分法求开方
    while (low <= high) {
      mid = (low + high) / 2.000; 

      tmp = mid * mid; 

      if (tmp - n <= ACCURACY && tmp -n >= ACCURACY * -1) {
        return mid;
      } else if (tmp > n) {
        high = mid;
      } else {
        low = mid;
      }
    } 

    return -1.000;
  } 

  int main(void)
  {
    double n, res; 

    while (scanf("%lf", &n) != EOF) {
      res = newSqrt(n);
      printf("%lf\n", res);
    } 

    return 0;
  }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
开方
c语言开方、c语言开方函数、c语言中开方函数、c语言中开方怎么表示、c语言中开方,以便于您获取更多的相关知识。

时间: 2024-11-03 11:57:21

详细解析C语言中的开方实现_C 语言的相关文章

深入浅析C语言中堆栈和队列_C 语言

1.堆和栈 (1)数据结构的堆和栈 堆栈是两种数据结构. 栈(栈像装数据的桶或箱子):是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同要取出放在箱子里面底下的东西(放入的比较早的物体),首先要移开压在它上面的物体(放入的比较晚的物体). 堆(堆像一棵倒过来的树):是一种经过排序的树形数据结构,每个结点都有一个值.通常所说的堆的数据结构,是指二叉堆.堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆.由于堆的这个特性,常用来实现优先队列,堆的存取是随意,

模拟实现C语言中的内存管理_C 语言

这里模拟了C语言中的内存管理,当我们要创建或者使用一个对象时,那么这个对象会调用retain方法,计数+1,当我们要释放对象,我们会调用free,这里注意要对计数记性判断,如果是0的话,那么就会销毁. #import <Foundation/Foundation.h> int cnt = 0; void fun (charchar * p) { printf("%c\n",p[0]); } charchar * retain1(charchar * p) { //retai

解析C++编程中的bad_cast异常_C 语言

由于强制转换为引用类型失败,dynamic_cast 运算符引发 bad_cast 异常.语法 catch (bad_cast) statement 备注 bad_cast 的接口为: class bad_cast : public exception { public: bad_cast(const char * _Message = "bad cast"); bad_cast(const bad_cast &); virtual ~bad_cast(); }; 以下代码包含

深入解析C++编程中的静态成员函数_C 语言

C++静态成员函数 与数据成员类似,成员函数也可以定义为静态的,在类中声明函数的前面加static就成了静态成员函数.如 static int volume( ); 和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分. 如果要在类外调用公用的静态成员函数,要用类名和域运算符"::".如 Box::volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已. 与静态数据成员不同,静态成

深入解析C++ STL中的常用容器_C 语言

STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中的常用容器包括:顺序性容器(vector.deque.list).关联容器(map.set).容器适配器(queue.stac). 1.顺序性容器 (1)vectorvector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问.由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢

深入解析C语言中常数的数据类型_C 语言

废话不多说,上代码 复制代码 代码如下: //编译环境:codeblocks+gcc#include <stdio.h>#include <stdint.h>int Fun(){    uint64_t y;    uint32_t x1, x2;     //y = 3000 * 24000000 / 1000;//常数默认作为32位数据,临时运算结果也是32位,溢出错误    //y = (uint64_t)3000 * (uint64_t)24000000 / 1000;//

简单总结C语言中的运算符优先级_C 语言

C语言中有很多运算符,除了四则运算,还有位运算.比较运算.逻辑运算.赋值运算等等,令人眼花缭乱的同时,优先级也让人头疼.通常建议在写代码的时候不用省略括号,但是并不是所有程序员都会按照这个规矩来,因此还是有必要记录一下,以备查阅. 总结几个比较重要的原则: 取成员的"0"目运算符[() . -> []]优先级最高: 单目运算符高于双目运算符: 四则运算高于移位运算: 移位运算高于比较运算: 比较运算高于位运算,位运算高于逻辑运算: 逻辑运算高于赋值运算: 逗号永远最低.

浅析C语言中的内存布局_C 语言

本节注重分清几个概念:.text .data .bss   堆   栈    静态存储区    只读存储区等 从程序到a.out 把程序变成.text  .data  .bss  是编译原理完成的过程 从a.out把程序映射到对应的内存地址空间是操作系统完成的,也就是在操作系统创建进程的时候完成的,在描述进程的那个结构体中. 我们常说的堆是为了申请动态内存的时候使用的,malloc. 栈是为了在函数中切换使用的,即存放函数中的局部变量.(堆和栈是操作系统分配的,所有不在a.out中) 静态存储区

C 语言中实现环形缓冲区_C 语言

1.实现代码: #include #include #include #include #include #define BUFFSIZE 1024 * 1024 #define min(x, y) ((x) < (y) ? (x) : (y)) pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; struct cycle_buffer { unsigned char *buf; unsigned int size; unsigned int in