常用数学库函数
title: 常用数学库函数
categories:
- ICPC
tags:
- null
abbrlink: f6229479
date: 2023-08-20 00:00:00
对于c++对数函数的记录:
C++函数__lg()和log2()都是用于计算以2为底的对数的函数,但它们有些地方是不同的。__lg()函数是一个非标准的函数,只在部分编译器中支持,它返回一个整数值,表示输入参数的二进制表示中最高位1的位置(从0开始计数)。例如,__lg(8)将返回3,因为8的二进制表示是1000,最高位1在第3位。log2()函数是C++11标准中提供的函数,它返回一个浮点数值,表示以2为底的对数。例如,log2(8)将返回3.0,因为8等于2的3次方。它们的返回值类型不同,前者返回整数,后者返回浮点数。另外,__lg()是非标准函数,只在部分编译器中支持,而log2()是C++11标准库中的函数,在大部分编译器中都可以使用。
作者:糖心伯虎
链接:https://www.zhihu.com/question/446219057/answer/2993917211
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
log函数包括两种函数 一种以e为低的log()函数
另一种为以10为底的log 10()函数;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double a=9,b=10;
cout<<log(a)<<endl;
cout<<log(exp(a))<<endl;
cout<<log10(b)<<endl;
return 0;
}
如果只是要整数不是要精准对数值,可以自己预处理加快速度
下面给出线性递推对数值下取整的代码:
for(int i = 1;i<=n;++i) lg[i] = lg[i>>1] + 1;
**************
#pow函数
double pow(double x,double y);
pow()返回类型是double, 循环计数i与 pow()比较的时候将被转换为两个double比较,于是就出现了边界问题。
pow的计算方式,存在误差,就是说pow(5,2);这条代码,实际上是25,但是由于算法问题很可能返回的值是24.9999,然后转化为整型,变成了24。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 爱飞鱼的blog!