用迭代法求某数a的平方根

article/2025/10/1 10:08:53

今天晚上笔试题目最后一题很简单,可是自己做不出= =,就是不用库函数,求一个浮点数的平方根。

立马想到用物理法,比如正方形的面积法等,可是求解出不出,然后就绕在里面了。归根到底还是平时的知识储备太少了,笔试完,上网一查才知道原来有特定的方法求平方根的大哭

迭代法求平方根


已知求平方根的迭代公式为:x n+1 = (xn + a / xn) / 2
要求前后两次求出的差的绝对值小于10-5


算法如下:

① 设定一个x的初值x0 ; (在如下程序中取x0=a/2, 通过迭代公式求出x1,可以肯定与真正的平方根相比,误差很大。)
② 用上述公式求出x的下一个值 x1 ;
③ 如此继续下去,直到前后两次求出的x值(x n+1和xn)满足以下关系:|x n+1-xn|<10-
#include <stdio.h>
#include <math.h>
int   main()
{
    float a;     
    float x0, x1;
    printf("Input a positive number:\n");
    scanf("%f", &a);
    x0 = a / 2;  
    x1 = (x0 + a / x0) / 2;
    while (fabs(x1 - x0) >= 1e-5)
    {
        x0 = x1;
        x1 = (x0 + a / x0) / 2;
    }
    printf("The square root of %5.2f is %8.5f\n", a, x1);
    return 0;
}

运行结果:
=====================================
Input a positive number:
2↙
The square root of  2.00 is  1.41421
=====================================

 其中初值是任取的(这里取的a/2) , 试将x0初值换为任意数均可得到如上结果。只是迭代的次数有差异。

 另外,考虑到while与do-while的差别,此程序用while结构,那是否会出现第一次判断条件时就不成立呢,即不会执行循环体。验证如下:设被开方数a为4,x0 初值为2,则由迭代公式可得x1值为2,x1=x0 值应该为0, 此时应该不会执行循环体,那么结果是否还是正确的呢? 验证如下:

#include <stdio.h>
#include <math.h>
int   main()
{
    float a;
    float x0, x1;
    printf("Input a positive number:\n");
    scanf("%f", &a);
    x0 = 2;
    x1 = (x0 + a / x0) / 2;
    printf("x0=%f x1=%f x1-x0=%f\n", x0, x1, x1-x0);
    while (fabs(x1 - x0) >= 1e-5)
    {
        x0 = x1;  
        x1 = (x0 + a / x0) / 2;
        printf("x1=%f\n", x1); 
    }
    printf("The square root of %5.2f is %8.5f\n", a, x1);
    return 0;
}

运行结果: (没有输出循环体中的内容)
===============================================
Input a positive number:
4↙
x0=2.000000 x1=2.000000 x1-x0=0.000000
The square root of  4.00 is  2.00000
===============================================

 若被开方数 a 为9, 初值为3, 情况与以上类似, 都不满足条件, 没有进入循环体运行, 但结果都是正确的。原因(我猜)是在做如上假设时, x1经一次迭代后已经就是正确的结果了, 而不需要再做第二次迭代,那么是否执行循环体也就无所谓了。这应该和这种迭代方法的由来有点关系,我猜。


http://chatgpt.dhexx.cn/article/UJ1JMaAa.shtml

相关文章

Java基础——运行时异常和非运行时异常

文章目录 Java中异常机制的体系结构Error&#xff08;错误&#xff09;Exception&#xff08;异常&#xff09;运行时异常和非运行时异常的区别结束 Java中异常机制的体系结构 在Java中&#xff0c;万物皆对象&#xff0c;异常也不例外。 Exception&#xff08;异常&#xff0…

Java编译时异常与运行时异常的区别

Java的异常可以分为编译异常和运行异常&#xff0c;其主要区别&#xff1a; 编译异常要求程序员必须处理&#xff08;捕获或者抛出&#xff09;&#xff0c;不然没法通过编译。 而运行异常可以不处理。 这应该是纸面最明显的区别了&#xff0c;我认为更重要的区别是在处理机…

运行时异常与非运行时异常有什么区别?

运行时异常与非运行时异常有什么区别&#xff1f; 运行时异常 RuntimeException 又称为非检查异常 uncheck exception。是 Exception 的子类。 在 Java 中&#xff0c;异常可以分为两种。Error 和 Exception&#xff0c;它们的父类是 Throwable。 Error 一些底层的类出错&…

杂谈——运行时异常和普通异常有什么区别

说到异常&#xff0c;大家都熟悉&#xff0c;只要程序出错了&#xff0c;那么肯定会说&#xff1a;“哎呀&#xff0c;我的程序出错啦~它抛出异常啦”。 但单单以“异常”的名称来称呼它们&#xff0c;未免也太粗糙了。我们毕竟是一个精致的程序员&#xff0c;当然得知道他们到…

常见的编译时异常和运行时异常

常见的编译时异常和运行是异常 1、粉红色的是编译时异常 2、绿色的异常是运行时异常 3、声明为Error的&#xff0c;则属于严重错误&#xff0c;如系统崩溃、虚拟机错误、动态链接失败等&#xff0c;这些错误无法恢复或者不可能捕捉&#xff0c;将导致应用程序中断&#xff0c;…

浅谈Java异常及其编译时异常和运行时异常的区别

异常是程序编码和运行时经常发生的事件&#xff0c;了解异常有助于我们提高代码质量&#xff0c;增强系统的健壮性&#xff0c;这里总结一下Java编程中的异常、以及Java编译时异常和运行时异常的区别&#xff0c;并列举几种常见的异常&#xff0c;以供参考学习。 一、什么是异…

Java 运行时异常和非运行时异常

异常类型分为两类&#xff1a;运行时异常和非运行时异常。 一、运行时异常&#xff1a; 运行时异常&#xff08;RuntimeException&#xff09;&#xff0c;一般不需要程序员进行捕获。 例如&#xff1a;NullPointException&#xff0c;IndexOutOfBoundsException。如果不对该…

Java-异常处理(编译时异常、运行时异常及处理机制,自定义异常)

个人简介 大家好&#xff0c;我是翰慧腾。一名正在努力学JAVA的大一小白&#xff0c;本文章为初学的笔记&#xff0c;希望各位多多指教。&#x1f499;欢迎点赞收藏留言&#x1f49c;你要批评指点四周风景&#xff0c;首先你要爬上屋顶&#x1f9e1; 一、异常 概述&#xff1a…

通俗理解运行时异常和非运行时异常(一般异常)

一&#xff0c;异常的概念 Java异常类层次结构图&#xff1a; Throwable&#xff1a; 有两个重要的子类&#xff1a;Exception&#xff08;异常&#xff09;和 Error&#xff08;错误&#xff09;&#xff0c;二者都是 Java 异常处理的重要子类&#xff0c;各自都包含大量子类…

运行时异常与检查异常区别

首先&#xff0c;思考一个问题&#xff0c;看下面三个代码&#xff0c;当抛出异常时&#xff0c;后面的代码还会运行吗&#xff0c;是否要在异常后加上return语句&#xff1f; //代码1 public static void test() throws Exception {throw new Exception("参数越界"…

编译时异常与运行时异常

在实际开发中&#xff0c;经常会在程序编译时产生一些异常&#xff0c;必须要对这些异常进行处理&#xff0c;这种异常称为编译时异常&#xff0c;也称为checked异常。另外&#xff0c;还有一种异常是在程序运行时产生的&#xff0c;这种异常即使不编写异常处理代码&#xff0c…

异常Exception 和 运行时异常RuntimeException

文章目录 概念 概念 Java中的所有异常都来自顶级父类Throwable。 Throwable下有两个子类Exception和Error。 Error是程序无法处理的错误&#xff0c;一旦出现这个错误&#xff0c;则程序将被迫停止运行。Exception不会导致程序停止&#xff0c;又分为两个部分RunTimeExceptio…

运行时异常与检查异常

Java把异常当做对象来处理&#xff0c;并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类&#xff1a;错误Error和异常Exception&#xff0c;Java异常体系结构如下图所示&#xff1a; 1.Throwable Throwable类是所有异常或错误的超类&#xff0…

运行时异常和编译异常

1.概念&#xff1a; Java中将程序执行中发生的不正常情况称为异常(Exception) 2.分类 Error(错误)&#xff1a;JVM无法解决的严重问题&#xff0c;程序会崩溃&#xff0c;比如JVM系统内部错误、资源耗尽等Exception&#xff1a;因编程错误等外在因素导致的一般性问题&#xff0…

Java Exception

Java Exception ####分类 Types of Exception There are mainly two types of exceptions: checked and unchecked where error is considered as unchecked exception. The sun microsystem says there are three types of exceptions: Checked Exception Unchecked Exce…

Java运行时异常和非运行时异常

1.Java异常机制 Java把异常当做对象来处理&#xff0c;并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类&#xff1a;错误Error和异常Exception&#xff0c;Java异常体系结构如下图所示&#xff1a; 图片来源&#xff1a;http://blog.csdn.net/w…

jdk和jre的区别还有maven

1.关于JDK的安装和配置问题 jdk我已经安装了(版本是1.8._60的--->并且完成相关的环境的配置) 还有环境的变量都配置好了的(java_home path 都配置好了的) JDK与JRE的区别 JRE&#xff1a; Java Runtime Environment JRE可以支撑Java程序的运行&#xff0c;包括JVM虚拟机&…

jdk与jre的区别,作用详解!

jdk与jre是Java开发和运行工具&#xff01; jdk包含有jre&#xff0c;但是jre也可以单独安装 下图为jdk目录下的jre 在安装jdk分为两个步骤&#xff0c;我们是经常会将jdk与jre一起安装&#xff0c;如果混淆两个概念建议分开安装。 JRE是Java Runtime Environment的缩写&…

java jdk jre版本要一样吗a_JDK是什么?JRE是什么?JDK和JRE的区别?

原标题:JDK是什么?JRE是什么?JDK和JRE的区别? Java Runtime Environment (JRE) 包含: Java虚拟机、库函数、运行Java应用程序和Applet所必须文件 Java 2 SDK (Development Kit)包含: JRE的超集,包含编译器和调试器等用于程序开发的文件 Java运行环境的三项主要功能: n …

java面试必问:JDK和JRE的区别是什么?

前言 JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一…