zoukankan      html  css  js  c++  java
  • 软件高速计算平方根与平方根的倒数

    #include<iostream>
    #include<cmath>
    using namespace std;



    float Sqrt(float x);

    float InvSqrt(float x);

    int main(void)
    {       
        system("color F0"); 
        cout.setf(ios::fixed);                     
        cout.setf(ios::showpoint);
        cout.precision(10);  


        //高速算法
        double result1,result2;
        result1=Sqrt(635);
        //系统方法
        double a=635;
        result2=sqrt(a);


        cout<<result1<<endl;
        cout<<result2<<endl;


        system("pause");
        return 0;
    }




    //浮点数平方根高速算法
    float Sqrt(float x)
    {
    float xhalf = 0.5f*x;
    int i = *(int*)&x;      // get bits for floating value
    i = 0x5f375a86- (i>>1); // gives initial guess y0                     迅速找出第一次比較接近的迭代结果
    x = *(float*)&i;        // convert bits BACK to float
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy  牛顿迭代法,次数越多越准确
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy


    return 1/x;

    }

    //实现平方根的倒数
    float InvSqrt(float x)
    {
    float xhalf = 0.5f*x;
    int i = *(int*)&x;      // get bits for floating value
    i = 0x5f375a86- (i>>1); // gives initial guess y0                     迅速找出第一次比較接近的迭代结果
    x = *(float*)&i;        // convert bits BACK to float
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy  牛顿迭代法,次数越多越准确
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
    x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy


    return x;

    }

  • 相关阅读:
    $(window).scrollTop()与$(dom).offset().top
    组织结构图
    杀人游戏
    猜数字游戏
    变量
    2018 -11-23 快捷键
    iOS开发—c语言 ATM取款机(全)2018-11-15
    iOS开发—c语言 ATM取款机(一)
    ios开发学习c语言第一天 2018-11-13
    iOS 面试题
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5367167.html
Copyright © 2011-2022 走看看