my_leetcode/c/main.c

46 lines
895 B
C

//
// Created by Huang on 2021/11/9.
//
#include <stdio.h>
/**
* 69.Sqrt(x)
* @param x x
* @return 平方根
*/
int mySqrt(int x) {
union {
long long i;
double f;
}u;
double xHalf = 0.5 * x;
u.f = x;
u.i = 0x1FF7A3BEA91D9B1B + (u.i >> 1);
u.f = u.f * 0.5 + xHalf / u.f;
u.f = u.f * 0.5 + xHalf / u.f;
u.f = u.f * 0.5 + xHalf / u.f;
return u.f;
}
/**
* 69.Sqrt(x)
* @param x x
* @return 平方根
*/
int mySqrt1(int x) {
double xHalf = 0.5 * x;
double f = x;
long long i = *(long long *) &f;
i = 0x1FF7A3BEA91D9B1B + (i >> 1);
f = *(double *) &i;
f = f * 0.5 + xHalf / f; // 牛顿迭代法,重复此句可提高精度
f = f * 0.5 + xHalf / f;
f = f * 0.5 + xHalf / f; // 三次迭代
return f;
}
int main() {
printf("Hello, World!\n");
printf("%d", mySqrt1(2147395599));
return 0;
}