1. 程式人生 > >C#語言自定義平方根函式

C#語言自定義平方根函式

求一個數的平方根。

要求:不使用系統函式,求出一個數的平方根(要求誤差值在0.0001)。按照如下的演算法。

如果一個數為x 假設它的平方根為y, 如果 y*y的結果和x相差大於0.0001,就繼續假設下一個值。應該如何猜下一個值呢?

用x除y的商結果z, 再求(y+z)的平均值作為新的平方根的猜測值。
示例如下,假設要求3的平方根,假設為1.5

X

猜測平方根y

結果z

下一個猜測值

3

1.5

3/1.5=2

(1.5+2)=1.75

3

1.75

3/1.75=1.7143

這時1.7143*1.7143=2.9388和3的差距還有

3-2.9388=0.0612所以繼續這個猜測過程,直到差距在0.0001這個可接受的範圍為止。

這個演算法被稱為牛頓迭代法。

class MySqrt
  {
      public const double diff=0.0001;
      public static double GetSqrt(double n)
      {
          double s = n / 2; //假設的平方根初值 
          while (NotFit(s,n))
          {
              s = ((n / s) + s) / 2;

          }
          return s;
      }
      ///
      /// 判斷是否符合要求的誤差範圍
      ///
      /// 平方根
      /// 目標數
      /// 假為合適的值,真為不合適
          public static bool NotFit(double num,double n){
             double r= num*num;
             double d = Math.Abs(n - Math.Abs(r));
              if(d>diff){
                   return true;
              }
             return false;
          }
  }

相關推薦

C#語言定義平方根函式

求一個數的平方根。 要求:不使用系統函式,求出一個數的平方根(要求誤差值在0.0001)。按照如下的演算法。 如果一個數為x 假設它的平方根為y, 如果 y*y的結果和x相差大於0.0001,就繼續假設下一個值。應該如何猜下一個值呢? 用x除y的商結果z, 再求(y+z

c語言定義函式,10月28日總結

現在時間23點34分,我想看看我幾點能完成   今天總結自定義函式的使用,先從最基礎的地方開始 1.形參實參 在定義函式的時候,函式大多數都有引數,在被主調函式需要傳遞資料給函式的引數 函式定義時用的變數叫形參 傳遞給函式的中形參值或變數叫實參 int m

初階C-1103,C語言定義函式練習

title: 初階C-1103 date: 2018-11-05 23:24:13 tags: C初階 1.實現一個函式,列印乘法口訣表,口訣表的行數和列數自己指定,輸入9,輸出99口訣表,輸入12,輸出1212的乘法口訣表。 #include<stdio.h> #inc

C語言--定義函式

【@C語言】關於自定義函式 return_type function_name([datetype|arg|],[datetype arg2],[…]) { //函式體 } 函式三要素: 函式返回值 函式名 引數列表 例子呀: //自定義函式的完整寫法 # include <s

c++ set定義比較函式

set<char*>無法像set<string>一樣進行預設的排序操作,需要自己定義比較函式進行排序,例子如下: #include <stdio.h> #include "stdafx.h" #include<iostream> #incl

C語言定義型別:結構體、列舉、聯合

結構體 結構體的宣告 結構體的自引用 結構體變數的定義和初始化

C語言定義型別解析----結構體

      C語言當中有一部分型別是自定義型別,比如結構體、陣列、列舉、聯合,其實指標也是自定義型別,我們可以定義各種各樣型別的指標,這在我之前的文章中有指標的解析。本文著重於講解結構體型別,以及它的一個重要特徵------記憶體對齊 一.結構體

c++ map定義比較函式(按key和按value)

按key: //自定義map的key typedef struct UrlKey { uint64_t dwBussID; uint64_t dwVersion; uint64

C語言定義一個函式,實現對字串做如下操作:當字元為字母時,大小寫互換,當字元為數字時,原樣輸出,當有其它字元出現時,結束操作,返回已處理的字串

Action(){       char str[]={"tEst234%^road"};int len = sizeof(str)/sizeof(char);//strTest2呼叫函式lr_output_message("%s",strTest2(str,len)); r

[C/C++]map定義比較函式

class Stu { public: Stu(int b = 0):a(b) { } /*bool operator < (const Stu& k)const 方法一: 兩個const都需要加上,否則編譯不通過 { return a &l

C# winform 定義函式中找不到Form中的控制元件和定義的全域性變數

今天碰到一個比較狗血的問題,想了很多辦法,最後發現,原來如此的坑。 在新建一個form頁面後,我們在程式碼頁面寫程式碼,往往會寫自定義的方法,一般情況下,在自定義的方法中是可以找到form頁面中的控制元件和自定義的全域性變數, 但是如果我們在自定義的方法前面加了static,那麼坑就出來啦,從此這個方法好

C++11使用定義hash函式及比較函式的unordered_set

#include <unordered_set> #include <functional> #include <iostream> struct MyKey { int key; }; struct MyKeyHashHasher { size_

《6.C語言巨集定義與預處理、函式函式庫》

《6.C語言巨集定義與預處理、函式和函式庫》 第一部分、章節目錄 4.6.1.C語言預處理理論 4.6.2.C語言預處理程式碼實戰 4.6.3.巨集定義1 4.6.4.巨集定義2 4.6.5.函式的本質 4.6.6.函式的基本使用 4.6.7.遞迴函式 4.6.8.函式庫 4.6.9.字

C語言巨集定義和巨集定義函式

轉自:http://blog.sina.com.cn/s/blog_861912cd0100tc94.html 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。   在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既

c語言巨集定義函式如何呼叫

 直接呼叫即可。如下示例: #include<stdio.h> #define sum(b,c){int d=0;d=b+c;printf("兩者的和:%d\n",d);} int main() {     

模板語言 定義函式simple_tag

模板語言自帶的一些處理函式:通過管道符來處理 幫助方法:{{ item.event_start|date:"Y-m-d H:i:s"}}  轉換成日期時間型{{ bio|truncatewords:"30" }} 只取前30個字元{{ my_list|first|upper }}&nbs

C++定義模板(函式模板、類模板)

C++提供兩種模板機制:函式模板、類模板一、函式模板1、所謂函式模板,實際上是建立一個通用函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函

C語言中變數和函式的宣告與定義

一、變數在將變數前,先解釋一下宣告和定義這兩個概念。宣告一個變數意味著向編譯器描述變數的型別,但並不為變數分配儲存空間。定義一個變數意味著在宣告變數的同時還要為變數分配儲存空間。在定義一個變數的同時還可以對變數進行初始化。 區域性變數通常只定義不宣告,而全域性變數多在原始檔中定義,在標頭檔案中宣告。 區域性變

R語言——定義函式求置信區間

#求單正態均值mu的置信區間 #引數依次為置信水平alpha,正態樣本x,已知總體方差(預設為未知) mu <- function(alpha,x,sigma=NA){ n <- length(x) meanx <- mean(x) if(is

c++ stl sort 定義排序函式cmp要遵循 strict weak ordering

   滿足strict weak ordering的運算子能夠表達其他所有的邏輯運算子(logical operator): <(a, b)  : (a < b) <=(a, b): !(b < a) ==(a, b): !(a <