【 C++ 】 讲解与实现 对数器接口

【C++】常用计算函数(对数、取整函数) 对数(头文件c.math) //C++11起 //返回arg的自然对数(底数为e) double log (double arg); float log (float arg); long double log (long double arg); //C++11起 //返回arg的底数为10的对数 float log10 ( float arg ); float log10f( float... 阅读详情

什么是对数器

说是叫对数器,但我觉得叫做核验器更好。
为什么?因为其作用是核验算法是否正确,所以我觉得叫核验器更好。
注意:本文实现的是生成只能int类型的对数器,其余类型不支持。

对数器的原理

对于一个核验器,其作用就是生成大量的数据来轰炸算法,若是算法经受了大量数据的轰炸,且保证每次都可以返回一个正确的值,说明这个算法是健壮的,良好的。

实现思路

  1. 对数器会不断的生成随机大小、随机内容的数组;
  2. 复制一份相同的数组;
  3. 把两个数组分别传入自己写的算法代码,以及传入专业的代码中;
  4. 对比两份代码输出的结果,结果不一样则退出;
  5. 结果一样就回到第1步。

代码实现

核心代码

#include <iostream>
#include <ctime>
#include <random>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;

// 生成一个随机长度的内容随机数组
void Generator(int*& arr, int size, int val, int& len)
{
    static int i = 0;
    default_random_engine e;
    uniform_int_distribution<int> u1(0, size); // 左闭右闭区间
    uniform_int_distribution<int> u2(0, val); // 左闭右闭区间
    e.seed(time(0) + (i++));

	// 生成随机长度
    len = u1(e);

    arr = new int[len];

    for (int i=0; i < len; i++)
    {
    	// 生成随机数据
        arr[i] = u2(e);
    }
}

// 生成随机带大小,随机数据的数组,给到两个外部传入的数组
void GenerateRandomArr(int*& arr1, int*& arr2, int& len)
{
    len = 0;
    Generator(arr1, 100, 100, len);
    arr2 = new int[len];
    memcpy(arr2, arr1, sizeof(int)*len);
}

// 删除动态创建的数组
void deleteArr(int*& arr)
{
    delete arr;
    arr = nullptr;
}

// 对比标准的算法,和自己编写的算法的区别
int Verifier(int NumberTest, int (*testFun)(int*& , int*& , int&))
{
    int len = 0;
    int* arr1 = NULL;
    int* arr2 = NULL;
    int err = 0;

    for (int i = 0; i < NumberTest; i++)
    {
        // 生成部分
        GenerateRandomArr(arr1, arr2, len);

        // 运算与数据对比
        testFun(arr1, arr2, len);

        // 收尾
        deleteArr(arr1);
        deleteArr(arr2);
        if( err != 0 )
        {
            return 1;
        }
    }
    
    return 0;
}

测试代码

这里实现了一个快速排序,然后调用了库的排序代码进行对比测试。

#include <iostream>
#include <ctime>
#include <random>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;

// 快速排序
void quickSort(int* pArr, int len)
{
    int* i = pArr;
    int* j = (pArr+len-1);
    int* p = pArr;

    while ( j > i )
    {
        while ( i != p && *i <= *p )
        {
            i++;
        }
        if ( i != p )
        {
            *i ^= *p;
            *p ^= *i;
            *i ^= *p;

            p = i;
        }

        while ( j != p && *p <= *j )
        {
            j--;
        }
        if ( j != p )
        {
            *j ^= *p;
            *p ^= *j;
            *j ^= *p;

            p = j;
        }
    }

    // 左边存在超过一个值
    if( p-pArr > 1 )
    {
        quickSort(pArr, p-pArr);
    }
    // 右边存在超过一个值
    if( len - (p-pArr) - 1 > 1 )
    {
        quickSort(p+1, len - (p-pArr) - 1);
    }
}

// 给对数器传入的运算与数据对比的函数
int sortVerifier(int*& arr1, int*& arr2, int& len)
{
    int err = 0;

	 // 打印数据
	 for(int i=0; i<len; i++)
	 {
	 	cout << arr1[i] << endl;
	 }
	 cout << "" << endl;
	 cout << "" << endl;

    // 运算部分
    sort(arr1, arr1+len, less<int>());
    quickSort(arr2, len);

    // 数据对比部分
    err = memcmp(arr1, arr2, sizeof(int)*len);
    
    return err;
}


int main()
{
	// 进行1000次轰炸看看效果
    if( Verifier(1000, sortVerifier) == 0 )
    {
        cout << "ok" << endl;
    }
    else
    {
        cout << "error" << endl;
    }

    system("pause");
    return 0;
}

效果

结果展示

使用C++实现自然对数ln2 首先,我们需要使用数学库中的log2函数来计算2的自然对数。此函数返回以2为底的对数。然后,将其与自然对数的基础e相除,即可得到ln2的值。在数学中,自然对数e是一个重要的常数,而自然对数的底数是2的情况也很常见。本文将演示如何使用C ++编写程序来计算自然对数ln2。至此,我们已经成功使用C ++实现了对数ln2的计算,只需要在程序中修改底数为其他值时,即可轻松地计算其他数的对数。通过以上程序,我们可以得到ln2的值为0.693147。使用C++实现自然对数ln2。 阅读详情

相关推荐

C++实现自然对数计算的程序

自然对数是以数学常数 e 为底的对数,其中 e 约等于 2.71828。自然对数在数学和科学领域中非常常见,尤其是在涉及连续增长或衰减的过程。我们用 ln(x) 表示 x 的自然对数,这意味着 e 的 x 次幂等于 x。C++标准库中的<cmath>头文件为开发者提供了丰富的数学运算功能。这些函数允许在C++程序中执行基本的数学运算,如三角函数、对数函数、指数函数等。例如,sincostan可以计算三角函数值;exp可以计算指数函数;pow可以计算幂函数。通过<cmath>

weixin_29138345的博客 1469

c++中实现对数计算(1047: 对数表 )

c++中实现对数计算(1047: 对数表 )

weixin_74009895的博客 1701

Cadence安装

选择刚刚解压的E盘DVD驱动中的setup.exe文件,安装路径推荐D盘,此处会自己给你新建文件夹,我们无需手动建文件夹。但是,新产品有一些BUG(影响使用流畅性),所以我们要对17.4打补丁,补丁包同样去吴川斌的博客下载。下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装包,链接同上。记录一下安装过程,方便以后安装使用Cadence。破解完成后,建议将这两个软件创建快捷方式到桌面。到这里,我们已经可以正常的使用Cadence了。对光盘映像文件解压后双击,可以在我的电脑看到。

电子那些事儿 1万+

[竞赛入门]C++中对数器的实现

1、定义randint随机生成[a,b]区间内的整数。2、定义mergeSort和mergeSum用归并的算法统计每一个数有几个比他大的数,有几个就用sum加几次这个数本身(注意是小的这个数自己)-> 时间复杂度O(nlogn)很快啊!3、定义xiaoNum 不必多说简单粗暴求小值 -> 时间复杂度O(n^2)。4、定义isEqual判断两个数组是否完全一样(这里没有用到,因为不需要比数组,只要比较累加的答案即可)。5、定义printArr打印数组方便观察,可灵活使用。

一个前端人,游戏开发魂。 919

以TMS320F28069为例,如何使用CCS建立DSP工程文件

以TMS320F28069为例,本文主要介绍了使用CCS建立DSP工程的流程

Honglong 2554

c++ 对数器实现

目录对数器的作用对数器的实现代码完整代码 对数器的作用 对数器用于在自己的本地平台验证算法正确性,用于算法调试,无需online judge。 好处: 没找到线上测试的online judge,则可以使用对数器。 大数据样本出错时,快速找到出错地方。 贪心策略使用,直接验证是否正确 对数器的实现代码 首先需要有一个你想要测试的方法,本文利用归并排序算法举例。归并算法代码如下: //有一个你想要测试的算法,这里以归并排序为例 class Solution { public: static in

机巧的胖子的博客 2270

机器人示教器方案昆仑通态脚本实现( 三菱FX3U+昆仑通态3轴联动))

项目应用场景:最终客户需要自由的修改程序流程,如检测什么信号,多少时间,再进入下一步,轴定位轨迹可以自由修改,方便最终可以在不修改PLC程序的情况下,自由示教程序。3.指令数量可以自行添加,在内存足够的情况下,无限制,只需要在PLC框架里面写好每个指令执行的内容就可以了,不需要在程序里面重复写相同类容;4.模板有延时指令,输入指令,输出指令,伺服定位指令,焊钳控制指令,自动修磨指令,转矩模式指令,结束指令等(可自行添加);1.有类似示教器编程功能,可以任意位置插入指令,可以任意位置删除指令;

huanyuecuiyu的博客 969

C++对数计算log

头文件: #include <math.h> 用法: double v,rv; v = 178.9; assert(v>0);// 对数的输入为正 rv = log(v);// 以e为底的对数 与 指数 exp(rv) : 以e为底的指数,相对应 rv = log10(v);// 以10为底的对数 double m=4; rv = log(v)/log(m);// 以m(m不为1)为底的对数 ...

Myblog 5420

康耐视visionpro-CogBlobTool工具详细说明

康耐视visionpro-CogBlobTool工具详细说明

视觉人机器视觉的博客 1724

【PHP面试题29】什么是PHP-FPM?它与PHP和Nginx有什么关系

PHP面试专区。计划将全覆盖PHP开发领域所有的面试题,对标资深工程师/架构师序列,欢迎大家提前关注锁定。PHP-FPM(FastCGI Process Manager)是PHP的FastCGI进程管理器,它是PHP 5.3.3及更高版本的一部分。它通过为每个请求分配一个独立的进程来提高PHP脚本的执行效率和性能,并且可以与Web服务器(如Nginx、Apache等)进行通信。PHP-FPM是PHP的FastCGI进程管理器,它通过为每个请求分配一个独立的进程来提高PHP脚本的执行效率和性能。

黑夜开发者的博客 1476

C++中的数学函数汇总

math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有: 1 三角函数 double sin (double); double cos (double); double tan (double); 2 反三角函数 double asin (double); 结果介于[-PI/2, PI/2] double acos (double); 结果介于[0, PI] double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2] double ata

weixin_36670529的博客 2849

【WRF教程第3.5期】预处理系统 WPS 详解:以4.5版本为例

预处理系统 WPS 详解:以4.5版本为例

WW、forever的博客 1422

计算log(对数)的c++代码

如何c++计算log(对数)

学习智者的博客 1971

基于Matlab的自动泊车系统开发:利用模糊控制实现智能停车解决方案的详细教程

Matlab是一种广泛应用于科学计算、工程建模与仿真的编程语言,其强大的工具箱和简洁的编程语法,使其成为开发自动泊车系统的理想选择。在开始编写代码之前,我们需要搭建Matlab的工作环境,并熟悉相关的工具箱,如Fuzzy Logic Toolbox,用于实现模糊控制。首先,确保你已经安装了Matlab软件,并加载了必要的工具箱。接下来,我们将逐步讲解如何在Matlab中实现自动泊车系统。

qq_38334677的博客 663

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++实现对数器

看了左神的视频课,提出了一种很好的小tips:对数器。对数器是用来测试代码正确性的,我们在找不到合适的oj系统测试自己的代码时,可以自己写一个对数器对代码进行测试。奈何左神是用java编写的对数器,虽然语言不重要,算法才是王道,但是根据实际需要我还是选择用c++编写程序,因此也就需要一个对数器了。 1. 对数器简单介绍 1.有一个你要测的方法a; 2.实现一个绝对正确即使复杂度不好的方法b; ...

暮日落流年的博客 2895

IEM模型,地表粗糙度模拟

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

log()函数(C++)

log()相关函数:总结 + 应用

psudd的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c++中的log函数

double b=4;//c相当于以a为底数,b为对数,c=2为什么可以这样呢?这个我们学过对数函数换底公式的同学都应该了解,这不多说。

weixin_74201531的博客 7168

C++对数函数 log() 操作

而log是对数函数 ,格式是log底数(x),如果没设底数,及只有log,那就是以e为底。首先得先了解这个函数exp(n)值为e^n次方;记得加头文件#include<math.h>

dusk_star的博客 2080

c++对数函数 log() 操作

首先要知道exp()函数exp(n)值为e^n次方;另外log函数包括两种函数 一种以e为低的log()函数另一种为以10为底的log 10()函数;具体用法见下面这个小程序#include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; int main() { double a=9,b=10; cout&lt;&lt;l...

来自师范的学渣 20万+

C++对数函数 log()

#include<iostream> #include<cmath> using namespace std; int main() { //a为底数 N为真数 double a = 2, N = 8; cout << "以2为底8的对数:" << log(N) / log(a) << endl; return 0; } 代码小白,仅作学习记录???? ...

小张与BUG 5272

C++计算对数函数

综述 c++计算对数函数,简单记录一下。 代码 #include<iostream> #include<cmath> using namespace std; int main() { double a=2; //以2为底 cout << log(4)/log(a)<<endl; return 0; } ...

FrankDura的博客 1万+

4.算法讲解之-对数器的使用(c++实现)

对数器的使用

yzc的博客 864

C++实现对数ln2(附带源码)

C++实现对数ln2(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 962
上一篇: 【 C++ 】 实现 异或运算 找到一堆数字中出现奇数次的数字
下一篇: 【 问题 】 debug 时 J-Link 寄存器全部读取失败 如 JLink Error: Can not read register 15 (R15) while CPU is running
嵌入一下?
博客等级 码龄6年 324粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入一下?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值