【C语言】程序性能优化——除法运算符
文章目录
- @[TOC](文章目录)
- 前言
- 一、牛顿迭代法
- 1、数学基础
- 2、C代码
- 3、实验
- 二、二进制移位和减法来实现除法
- 1、数学基础
- 2、C代码
- 3、实验
- 三、参考资料
- 总结
文章目录
- @[TOC](文章目录)
- 前言
- 一、牛顿迭代法
- 1、数学基础
- 2、C代码
- 3、实验
- 二、二进制移位和减法来实现除法
- 1、数学基础
- 2、C代码
- 3、实验
- 三、参考资料
- 总结
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、牛顿迭代法
1、数学基础
2、C代码
#define MAX_ITER 1000
#define TOLERANCE 1e-10
double newton_divide(double a, double b)
{
double f_x, f_prime_x;
double x;
double iter;
double x_next;
if (b == 0)
{
printf("Error: Division by zero.\n");
return -1;
}
while (iter < MAX_ITER)
{
f_x = x * b - a;
f_prime_x = b;
x_next = x - f_x / f_prime_x;
// ??????
if (fabs(x_next - x) < TOLERANCE)
{
return x_next;
}
x = x_next;
iter++;
}
return x;
}
int a=10;
int b=4;
printf("newton_divide = %f\n",newton_divide(a, b));
printf("div= %d\n",Div(a,b));
3、实验
二、二进制移位和减法来实现除法
1、数学基础
左移操作:在C语言中,m = m << 1 是将整数 m 左移一位,这相当于将 m 乘以2(在二进制中,左移一位就是在数的末尾添加一个0)。
倍增和减法:内层循环通过倍增 m(即 y 的倍数)来找到不超过 x/2 的最大倍数。这个步骤试图通过快速倍增来逼近 x,以便在每次外层循环迭代中尽可能多地减少 x 的值。
逐次逼近:外层循环不断重复这个过程,直到 x 小于 y。在每次迭代中,它都会从 x 中减去一个尽可能大的 y 的倍数(即 y*m),并将这个倍数累加到结果 result 中。
2、C代码
int Div(int x,int y)
{
int result=0;
if(y==0)return -1;
while(x >=y)
{
int m=1;
while(y*m <= (x>>1))
{
m=m<<1;
}
result+=m;
x-=y*m;
}
return result;
}
3、实验
三、参考资料
除法的优化
c笔试面试 之 不用除法操作实现两个正整数的除法
C语言程序性能优化:十大策略及代码案例解析
给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数
fabs函数的使用
C语言面试题汇总(华为公司)
总结
本文仅仅简单介绍了【C语言】程序性能优化——除法运算符,评论区欢迎讨论。