高精度头文件

STM32 CubeMX中的高精度延时头文件实现与应用 STM32微控制器是广泛应用于嵌入式系统开发的系列微处理器。随着项目的复杂性提升,需要一个高效的开发工具来简化开发流程。STM32 CubeMX 就是这样一款工具,它能够大大减轻开发人员的负担,提升开发效率。STM32CubeMX 提供了一个简洁直观的图形化界面,允许用户通过简单的操作选择所需的微控制器型号、配置外设以及初始化代码设置。开发者可以通过“Pinout视图”来管理微控制器的引脚功能,通过“时钟树”视图来配置系统时钟,确保性能与能耗的最佳平衡。 阅读详情

最近写高精度写得有些烦,于是直接整了个高精度头文件。

不知道头文件怎样写的同学看这里:怎么用c++写一个自己的头文件?

头文件名字: c l e a r . h clear.h clear.h

包含函数:

clearplus(a,b);//高精加
clearmulti(a,b);//高精乘
cleardiv(a,b);//高精除
clearmod(a,b);//高精模
clearsqrt(a,b);//高精开根
//转载请注明出处。
#ifndef CLEAR_H
#define CLEAR_H
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 300+4; 
const ll N=20010,mod=100000000,length=log(mod)/log(10);
ll m;
int d[100001],e[100001];
bool k,mm;
int tmp[MAXN] = {};//交换用字符串
int a[100001],b[100001],c[100001],t[100001],p;
long long numa[50005],numb[50005],aans[50005],l1,l2,l,cnt2;
int work(int o,char *O,int I)
{
    char c, *D=O ;
    if(o>0)
    {
        for(l=0;D[l];D[l++]-=10)
        {
            D[l++]-=120;
            D[l]-=110;
            while(!work(0,O,l))
                D[l]+=20;
            putchar((D[l]+1032)/20);
        }
        putchar(10);
    }
    else
    {
        c=o+(D[I]+82)%10-(I>l/2)*(D[I-l+I]+72)/10-9;
        D[I]+=I<0 ? 0 : !(o=work(c/10,O,I-1))*((c+999)%10-(D[I]+92)%10);
    }
    return o;
}
int clearplus(char a[],char b[]){
	l1=strlen(a);
	l2=strlen(b);
	for(int i=l1-1;i>=0;--i){
		numa[l1-i-1]=a[i]-'0';
	}
	for(int i=l2-1;i>=0;--i){
		numb[cnt2]=b[i]-'0';
		cnt2++;
	}
	l=max(l1,l2);
	for(int i=0;i<l;++i){
		aans[i]+=numa[i]+numb[i];
		aans[i+1]=aans[i]/10;
		aans[i]%=10;
	}
	if(aans[l]) l++;
	for(int i=l-1;i>=0;--i) printf("%d", aans[i]);
	memset(numa,0,sizeof numa);
	memset(numb,0,sizeof numb);
	memset(aans,0,sizeof aans);
	l1=l2=l=cnt2=0;
}
int clearmulti(char a[],char b[]){
	l1=strlen(a);
	l2=strlen(b);
	for(int i=l1-1; i>=0; --i){
		numa[l1-i-1]=a[i]-'0';
	}
	for(int i=l2-1; i>=0; --i){
		numb[cnt2]=b[i]-'0';
		cnt2++;
	}
	l=max(l1, l2);
	for(int i=0; i<l1; ++i){
		for(int j=0;j<l2;j++){
			aans[i]+=(numa[i]*numb[j])*pow(10,j);
		}
		aans[i+1]=aans[i]/10;
		aans[i]%=10;
	}
	if(aans[l]){
		l++;
	}
	for(int i=l-1; i>=0; --i){
		printf("%d", aans[i]);
	}
	memset(numa,0,sizeof numa);
	memset(numb,0,sizeof numb);
	memset(aans,0,sizeof aans);
	l1=l2=l=cnt2=0;
}
int compare(int a[], int b[]) {
    //索引为0的数据为数组长度
    if (a[0]>b[0]) {
        return 1;
    } else if (a[0]<b[0]) {
        return -1;
    }
 
    //逐位比较
    for (int i=a[0]; i>0; i--) {
        if (a[i]>b[i]) {
            return 1;
        } else if (a[i]<b[i]) {
            return -1;
        }
    }
 
    return 0;
}
 
void numcpy(int a[],int b[],int dest) {
    //将数组右移,使两个数组右端对齐,形参q数组储存右移后的结果
    for (int i=1;i<=a[0];i++) {
        b[i+dest-1] =a[i];
    }
    b[0] = a[0]+dest-1;
}
 
int cleardiv(char s1[],char s2[]) {
    //处理负数
    bool flaga = false;//乘数a的符号
    if ('-'==s1[0]) {
        flaga = true;
        strcpy(s1, &s1[1]);//删除负号
    }
    bool flagb = false;//乘数b的符号
    if ('-'==s2[0]) {
        flagb = true;
        strcpy(s2, &s2[1]);//删除负号
    }
 
    //处理输出的负号
    if (true==flaga && false==flagb) {
        //商为负数
        printf("-");
    }
 
    //处理乘数1
    int len = strlen(s1);
    a[0] = len;
    for (int i=0; i<len; i++) {
        a[len-i]=s1[i]-'0';
    }
 
    //处理乘数2
    len = strlen(s2);
    b[0] = len;
    for (int i=0; i<len; i++) {
        b[len-i]=s2[i]-'0';
    }
 
    if (0==compare(a,b)) {
        //两数相等
        printf("1\n0\n");
        return 0;
    } else if (-1==compare(a,b)) {
        //被除数小,除数大
        printf("0\n");//输出除数
        if (true==flaga) {
            printf("-");
        }
        printf("%s\n", s1);
        return 0;
    } else {
        c[0] = a[0]-b[0]+1;
        for (int i=c[0]; i>0; i--) {
            memset(tmp, 0, sizeof(tmp));
            //高位对齐
            numcpy(b,tmp,i);
 
            //
            while (compare(a, tmp)>=0) {
                c[i]++;
                //减法
                for (int j=1; j<=a[0]; j++) {
                    if (a[j]<tmp[j]) {
                        a[j+1]--;
                        a[j]+=10;
                    }
                    a[j]-=tmp[j];
                }
 
                int k=a[0];
                while (a[k]==0) {
                    k--;
                }
                a[0]=k;
            }
        }
 
        //控制最高位的0
        while (c[0]>0 && c[c[0]]==0) {
            c[0]--;
        }
    }
    for (int i=c[0]; i>0; i--) {
        printf("%d", c[i]);
    }
    memset(c,0,sizeof 0);
    memset(numa,0,sizeof numa);
	memset(numb,0,sizeof numb);
	memset(aans,0,sizeof aans);
	l1=l2=l=cnt2=0;
    return 0;
}
int clearsub(char a[],char b[]){
	l1=strlen(a);
    l2=strlen(b);
    p=l2;
    for(int i=0;i<=l1;i++){
		c[l1-i]=a[i]-'0';
	}
    for(int i=0;i<=l2;i++){
		d[l2-i]=b[i]-'0';
	}
    if(l1>=l2){
        p=l1;
        for(int i=1;i<=p;i++){
        	swap(c[i],d[i]);
		}
	}
    else{
    	mm=1;
	} 
    for(int i=1;i<=p;i++){
    	swap(c[i],d[i]);
	}
    for(int i=p;i>=0;i--){
        if (c[i]>d[i]){
        	break;
		}
        if(c[i]<d[i]){
            k=1;
            break;
        }
    }
    if(k){
		mm=1;
		for(int i=0;i<p;i++){
			swap(c[i],d[i]);
		}
	}
    for(int i=0;i<=p;i++){
        e[i]+=c[i]-d[i];
        if(e[i]<0){
        	e[i]+=10;
			e[i+1]-=1;
		}
    }
    k=0;
    if(mm){
    	cout<<"-";
	}
    for(int i=0;i<p;i++){
        if(e[p-i]!=0||i==p-1){
        	k=1;
		}
        if(k){
        	cout<<e[p-i]; 
		}   
    }
    return 0;
}
int clearmod(char s1[],char s2[]){
	//处理负数
    bool flaga = false;//乘数a的符号
    if ('-'==s1[0]) {
        flaga = true;
        strcpy(s1, &s1[1]);//删除负号
    }
    bool flagb = false;//乘数b的符号
    if ('-'==s2[0]) {
        flagb = true;
        strcpy(s2, &s2[1]);//删除负号
    }
 
    //处理输出的负号
    if (true==flaga && false==flagb) {
        //商为负数
        printf("-");
    }
 
    //处理乘数1
    int len = strlen(s1);
    a[0] = len;
    for (int i=0; i<len; i++) {
        a[len-i]=s1[i]-'0';
    }
 
    //处理乘数2
    len = strlen(s2);
    b[0] = len;
    for (int i=0; i<len; i++) {
        b[len-i]=s2[i]-'0';
    }
 
    if (0==compare(a,b)) {
        //两数相等
        printf("1\n0\n");
        return 0;
    } else if (-1==compare(a,b)) {
        //被除数小,除数大
        printf("0\n");//输出除数
        if (true==flaga) {
            printf("-");
        }
        printf("%s\n", s1);
        return 0;
    } else {
        c[0] = a[0]-b[0]+1;
        for (int i=c[0]; i>0; i--) {
            memset(tmp, 0, sizeof(tmp));
            //高位对齐
            numcpy(b,tmp,i);
 
            //
            while (compare(a, tmp)>=0) {
                c[i]++;
                //减法
                for (int j=1; j<=a[0]; j++) {
                    if (a[j]<tmp[j]) {
                        a[j+1]--;
                        a[j]+=10;
                    }
                    a[j]-=tmp[j];
                }
 
                int k=a[0];
                while (a[k]==0) {
                    k--;
                }
                a[0]=k;
            }
        }
 
        //控制最高位的0
        while (c[0]>0 && c[c[0]]==0) {
            c[0]--;
        }
    }
    if (0==a[0]) {
        printf("0\n");
    } else {
        if (true==flaga) {
            printf("-");
        }
        for (int i=a[0]; i>0; i--) {
            printf("%d", a[i]);
        }
    }
    memset(c,0,sizeof 0);
    memset(numa,0,sizeof numa);
	memset(numb,0,sizeof numb);
	memset(aans,0,sizeof aans);
	l1=l2=l=cnt2=0;
    return 0;
}
int clearsqrt(char s[]){
	l=0;s[0]='0';
	scanf("%s",s+1);  
    if(strlen(s)%2 == 1)  
        work(2,s+1,0);  
    else  
        work(2,s,0);  
}
#endif

使用方法:

#include<bits/stdc++.h>
#include "clear.h"
using namespace std;
char aa[5005],bb[5005],cc[5005];
int n;
int main(){
	cin>>aa>>bb;
	clearplus(aa,bb);
	cout<<endl;
	clearmulti(aa,bb);
	cout<<endl;
	cleardiv(aa,bb);
	cout<<endl;
	clearmod(aa,bb);
	cout<<endl;
	clearsub(aa,bb);
	cout<<endl;
	clearsqrt(cc);
	return 0;
}

Qt实现的高精度计算器 例如:1/3 = 3.3333333333333333333333333333333333333333333333333333333333333333333333333333333。2.将calculator.cpp文件的从开头到这个计算结果的函数的全部代码使用以下代码替换掉,之后重新运行,精度即可回到68位。1.将代码中的头文件全部使用以下代码替换。 阅读详情

相关推荐

clear.h 高精度头文件

一个便捷的 C++ 高精度头文件。未经许可,禁止转载。

实战:C++编写高精度头文件

有关如何编写头文件,请见:C++如何写自定义的头文件_钜铠的博客-优快云博客,C++如何写自定义的头文件_钜铠的博客-优快云博客 ,这里不再赘述。这次我们来一个实战,编写高精度头文件(大数加乘)——“clear.h”。.........

YoungGeeker 1056

c++高精度整数库(支持高精度除高精度)

这个版本的高精度整数库不仅支持高精度除高精度,同时修复了减法计算中的一个严重的bug。并支持高精度类型与其他一切可转换为高精度类型的类型(int,long long,unsignd,string)进行混合运算。同时,全面优化了除法、取余计算的时间复杂度。

高精度头文件(cal.cpp)

【代码】高精度头文件(cal.cpp)

daiyulong120222的博客 271

【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究

本文主要是对同构和异构传感器在指定空间内的布局进行优化,以最大覆盖率为目标,使用了DBO/SCA/WOA/SSA/NOA等启发式算法,在100x100的空间内,对30,100,200个传感器进行优化,得到最优的布局位置和对应覆盖率。

u013367499的博客 1818

国标Gb28181里Contact和Route的使用

国标Gb28181是基于Sip协议的,因此对Contact和Route的使用,也可以说是Sip里Contact和Route的使用。Contact和Route则是sip协议里的头字段。 现在,在使用国标Gb28181来做项目时,经常会遇到这种情况,国标的下级是在内网里,上级在公网上。如果不做处理,下级到上级会经过nat协议的转换从而导致上级向下级发送请求时(比如获取目录请求)不能到达

wwyyxx26的专栏 5511

c++高精度类

头文件 - intx.h //intx.h #ifndef INTX_H_ #define INTX_H_ #include <iostream> #include <cstring> #include <string> class intx { private: bool sign; int *num; int len; sta...

weixin_30500289的博客 538

WSL2 Ubuntu 22.04安装NVIDIA驱动避坑指南:从驱动版本选择到CUDA环境验证

本文详细介绍了在WSL2 Ubuntu 22.04中安装NVIDIA驱动和配置CUDA环境的完整流程,包括驱动版本选择、环境变量设置以及常见问题解决方案。通过本指南,用户可以避免常见的安装陷阱,确保GPU加速环境正确配置,适用于深度学习开发和CUDA编程。

weixin_28419039的博客 463

C++实现高精度加法、高精度减法、高精度乘法、高精度减法及思路注释

这里是一些废话: 早在学习斐波那契数列兔子繁殖问题的时候,超过一定输入值的运算结果值会发生溢出,当时带我的于老师就有提了一句我的程序该如何处理大数据运算的问题,多年之后(?!你还好意思说),我终于又有了一个机会来学习这种运算方式。 由于是自己学习,在查阅资料的过程中遇到了一些困难,我发现有一些代码根本没有注释或者给的思路提示很少让我看不懂,或者是只写了一个加减运算就弃坑了。自己就下决心学会了高精度四则运算之后一定要写一个非常详细的思路和注释给初学者,但是我学会了以后就并不想写思考历程了(??),好吧好吧

weixin_37706349的博客 4851

PCIE配置和地址空间

来源:https://www.jianshu.com/p/574e9a2cbc4e 每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念,那时的配置空间如下: 图6.1 整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Brid.

qq_28643619的博客 4059

llama-factory微调qwen2.5-vl

使用llama-factory完成qwen2.5-vl微调

qq_44908396的博客 2932

高精度计算头文件分享

前一阵子从同学那里搞来了一个高精度计算的头文件,在获得许可后决定分享出来 代码在此: #ifndef CLEAR_H #define CLEAR_H #include <iostream> #include <algorithm> #include <string> #include <cstring> using namespace std; int A[1010], B[1010], sum[1010], mul[1010]; void s2..

A123456uuu的博客 272

YOLOv5_DeepSORT_Pytorch训练自己的多目标跟踪模型

1 准备 环境配置:https://blog.youkuaiyun.com/weixin_50008473/article/details/115250986?spm=1001.2014.3001.5501 YOLOv5_DeepSORT_Pytorch代码地址: https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch DeepSORT论文:https://arxiv.org/pdf/1703.07402.pdf 2 训练目标检测模型 训练自己的目标检测模

weixin_50008473的博客 1万+

c++高精度头文件

【代码】c++高精度头文件。

zhuzhuwei5的博客 239

2025华为OD机试真题+全流程解析+备考攻略+面试技巧+机考经验分享+Java/python/JS/C++/C语言实现

本专栏包含华为 OD 机试最新的 A卷+B卷+C卷+D卷+E卷题库,为全网最全、最新题库,500+真题。每一篇文章都包含了题目描述、解题思路以及实现代码。同时免费提供最新的在线OJ 刷题系统。已有上百名小伙伴通过刷真题题库通过了华为od机考,拒绝一切形式的代考,替考行为!!!以下是本专栏详细内容介绍:本专栏提供在线OJ刷题系统:OJ题库OJ系统注册&使用教程:OJ使用教程其他专栏以及答疑介绍:50+ 高频面试手撕真题,已有上百位小伙伴高频认证。1:机试没过,半年的冷冻期。2:已经订阅过我专栏的同学,推荐新人

MISAYAONE的博客 2225

ubuntu20 安装px4、mavros、QGroundControl

首先安装一下ant,否则没法运行,同时因20.04的缺少动态库libawt_xawt.so无法被Java8给调用,我的解决办法是去18.04把18.04的相同路径下的动态库libawt_xawt.so移动到20.04的/usr/lib/jvm/java-11-openjdk-amd64/lib/路径中。用rosdepc的时候,你得确保你用的是鱼香ROS的提供的ROS安装方法,否则是没有rosdepc的。make px4_sitl gazebo之前,可以安装一下gazebo的 模型。二、安装MAVROS。

qq_58060770的博客 3346

c语言的高精度头文件,高精度计算n阶乘的c语言源代码与解释.doc

高精度计算大数阶乘的c语言源代码和解释关键词:高精度,大数,阶乘,C, 输入的容错处理,内容介绍:利用高精度计算n阶乘的c语言源代码及其解释,其中还包括一些在C语言中常用的简单编程习惯和技巧,非常适合C语言初学者借鉴,如果好好的把程序调试一遍会对初学者很大的启发。程序中没有用到指针,结构体,共用体等内容,但运用了预编译,头文件,数组等等知识,特别是对getchar()进行输入容错的运用,并有详细的...

weixin_29260291的博客 337

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c语言的高精度头文件,a+b(高精度)[陈涛]——c语言

spring-mvc注解&lpar;mvc&colon;annotation-driver&comma;JSON&comma;配置详解&rpar;一.DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 的使用已经过时! spring 3.1 开始我们应该用 Reque ...17&...

weixin_42510360的博客 410

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怎么用c++写一个自己的头文件?

步骤1.新建一个 .cpp 文件2.基本结构3.注意事项(1)编译时保存成 .h 文件(2)如果内容正确的话会提示:(3)会生成.h.gch文件,莫删除4.例子:[高精度头文件](https://blog.youkuaiyun.com/qi_programmer/article/details/121853809) 1.新建一个 .cpp 文件 2.基本结构 #ifndef CLEAR_H //clear.h大写。一般都要大写。 #define CLEAR_H #include<bits/stdc++.h>

qi_programmer的博客 2482

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

c++ chrono头文件含义

在C++中,<chrono>是一个标准库头文件,用于处理时间相关的操作,包括时间点时间间隔和时钟。它提供了一套强大的时间处理功能,支持高精度的时间测量、时间间隔的计算以及时间点的表示。

HJQD777的博客 753

高精度运算头文件gao.h

众所周知作者很懒。

2401_86493615的博客 236

5.20——高精度加减乘法+strcmp函数

用于比较字符串,而不是两个整数,它的参数应该是指向以空字符结尾的字符数组的指针。在头文件<cstring>中。4.关于strcmp函数;

2301_79290155的博客 267

Day6 高精度加减算法+洛谷讲解

该开始拿出这道题我就觉得很眼熟,果不其然,原来是我曾经最迷茫的一道题,我觉得写了两遍,其实无论是对于我自己还是屏幕前的同学们,相信大家都开始慢慢读懂这道题了吧,让我们继续努力吧!亲爱的同学么,这个是cmath,我第一次的时候是写错了。是我写一道洛谷题的时候突然发现的。接下来,我来给大家介绍一道题,这个。

lxy2966201752的博客 218

高精度计时器项目学习笔记

在.h文件中声明了类、类内的成员函数、成员变量等;而在.cpp文件中进行具体实现;比如.h文件中声明了类StopWatch,并且声明了类内的方法Start(),则cpp文件中,通过来写方法的具体实现;// .h文件声明public:// .cpp文件实现// 具体实现通过域作用符来访问类内的公有方法;对于不同平台,引入的头文件,和实现的方式都不同,所以可以使用条件编译宏来实现不同平台执行不同语句引入不同头文件;

OutlierLi's Blog 918

Chet:Delphi的C头文件翻译神器

Chet:Delphi的C头文件翻译神器 项目介绍 Chet是一款专为Delphi开发者设计的.h-to-.pas翻译工具,它利用libclang for Delphi库,将C语言的头文件(.h文件)转换为Delphi的单元文件(.pas文件)。Chet通过Clang编译器解析头文件,确保翻译的准确性,减少了手动调整的需求。 项目技术分析 Chet的核心技术在于其使用了Clang编译器来解析C语言...

gitblog_00468的博客 715

n c语言源代码,高精度计算n阶乘的c语言源代码和解释.doc

高精度计算大数阶乘的c语言源代码和解释关键词:高精度,大数,阶乘,C, 输入的容错处理,内容介绍:利用高精度计算n阶乘的c语言源代码及其解释,其中还包括一些在C语言中常用的简单编程习惯和技巧,非常适合C语言初学者借鉴,如果好好的把程序调试一遍会对初学者很大的启发。程序中没有用到指针,结构体,共用体等内容,但运用了预编译,头文件,数组等等知识,特别是对getchar()进行输入容错的运用,并有详细的...

weixin_30395665的博客 195
上一篇: c++中的三角函数
下一篇: 怎么用c++写一个自己的头文件?
return_dr
博客等级 码龄5年 216粉丝 105原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值