当前位置: 首页 > article >正文

【C语言】程序性能优化——除法运算符

【C语言】程序性能优化——除法运算符


文章目录

    • @[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语言】程序性能优化——除法运算符,评论区欢迎讨论。


http://www.kler.cn/a/391581.html

相关文章:

  • adb shell常用命令
  • 如何查看电脑关机时间
  • aws(学习笔记第十二课) 使用AWS的RDS-MySQL
  • docker运行ActiveMQ-Artemis
  • Docker网络和overlay的基础讲解
  • 【RabbitMQ】08-延迟消息
  • 设计一致性的关键:掌握 Axure 母版使用技巧
  • 框架学习03-Spring 七大核心模块
  • 机器学习—神经网络的Softmax输出
  • “K线剩余时间”,显示当前K线已用和剩余时间 +品种信息面板 MT4免费工具!
  • MDBook 使用指南
  • Serverless GPU:助力 AI 推理加速
  • 常见error集合
  • RDD 算子全面解析:从基础到进阶与面试要点
  • 最新7+非肿瘤生信,机器学习筛选关键基因+样本验证。目前机器学习已经替代WGCNA成为筛选关键基因方法。非肿瘤生信分析欢迎咨询!
  • 期权懂|期权市场的发展对于投资者有什么影响?
  • AI写作(二)NLP:开启自然语言处理的奇妙之旅(2/10)
  • Ab测试与灰度发布
  • 生成 Django 中文文档 PDF 版
  • 【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程
  • 开发工具 IntelliJ IDEA 使用技巧、快捷键、插件分享
  • Flink转换算子
  • CSM32RV20:RISC-V核的低功耗MCU芯片,常用在智能门锁上
  • C++中级学习笔记
  • TortoiseSVN提示服务器凭证检核错误:站点名称不符
  • windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解