常用数学函数
计算常用对数 (底为10) (log10(x))
std::log10,
std::log10f,
std::log10l
定义于头文件 | ||
float log10f( float arg ); | (1) | (C99 起) |
double log10( double arg ); | (2) | |
long double log10l( long double arg ); | (3) | (C99 起) |
定义于头文件 | ||
#define log10( arg ) | (4) | (C99 起) |
1-3) 计算 arg
的常用(底 10 )对数。
4) 泛型宏:若 arg
拥有 long double 类型,则调用 log10l
。否则,若 arg
拥有整数类型或 double 类型,则调用 log10
。否则调用 log10f
。
参数
arg | - | 浮点值 |
返回值
若不出现错误,则返回 arg
的常用(底 10 )对数( log
10(arg) 或 lg(arg) )。
若出现定义域错误,则返回实现定义值(支持的平台上为 NaN )。
若出现极点错误,则返回 -HUGE_VAL
、 -HUGE_VALF
或 -HUGE_VALL
。
错误处理
报告 math_errhandling 中指定的错误。
若 arg
小于零则出现定义域错误。
若 arg
为零则可能出现极点错误。
若实现支持 IEEE 浮点算术( IEC 60559 ),则
- 若参数为 ±0 ,则返回 -∞ 并引发 FE_DIVBYZERO 。
- 若参数为 1 ,则返回 +0 。
- 若参数为负数,则返回 NaN 并引发 FE_INVALID 。
- 若参数为 +∞ ,则返回 +∞ 。
- 若参数为 NaN ,则返回 NaN 。
调用示例
#include <iostream>
#include <cstdlib>
#include <typeinfo>
#include <cinttypes>
#include <cmath>
int main()
{
//计算浮点值 arg 的绝对值。
const float fNumber = 0.1314;
std::cout << "typeid(float).name(): " << typeid(float).name() << std::endl;
for (int i = 0; i < 1000; i += 100)
{
std::cout << "std::log10(" << fNumber + i << "): "
<< std::log10(fNumber + i) << std::endl;
}
std::cout << std::endl;
for (int i = 0; i < 1000; i += 100)
{
std::cout << "std::log10(" << -fNumber - i << "): "
<< std::log10(-fNumber - i) << std::endl;
}
std::cout << std::endl;
const double dNumber = 0.01314;
std::cout << "typeid(double).name(): " << typeid(double).name() << std::endl;
for (int i = 0; i < 1000; i += 100)
{
std::cout << "std::log10(" << dNumber + i << "): "
<< std::log10(dNumber + i) << std::endl;
}
std::cout << std::endl;
for (int i = 0; i < 1000; i += 100)
{
std::cout << "std::log10(" << -dNumber - i << "): "
<< std::log10(-dNumber - i) << std::endl;
}
std::cout << std::endl;
const long double ldNumber = 0.001314;
std::cout << "typeid(long double).name(): " << typeid(long double).name() << std::endl;
for (int i = 0; i < 1000; i += 100)
{
std::cout << "std::log10(" << ldNumber + i << "): "
<< std::log10(ldNumber + i) << std::endl;
}
std::cout << std::endl;
for (int i = 0; i < 1000; i += 100)
{
std::cout << "std::log10(" << -ldNumber - i << "): "
<< std::log10(-ldNumber - i) << std::endl;
}
std::cout << std::endl;
return 0;
}
输出
typeid(float).name(): f
std::log10(0.1314): -0.881405
std::log10(100.131): 2.00057
std::log10(200.131): 2.30132
std::log10(300.131): 2.47731
std::log10(400.131): 2.6022
std::log10(500.131): 2.69908
std::log10(600.131): 2.77825
std::log10(700.131): 2.84518
std::log10(800.131): 2.90316
std::log10(900.131): 2.95431
std::log10(-0.1314): nan
std::log10(-100.131): nan
std::log10(-200.131): nan
std::log10(-300.131): nan
std::log10(-400.131): nan
std::log10(-500.131): nan
std::log10(-600.131): nan
std::log10(-700.131): nan
std::log10(-800.131): nan
std::log10(-900.131): nan
typeid(double).name(): d
std::log10(0.01314): -1.8814
std::log10(100.013): 2.00006
std::log10(200.013): 2.30106
std::log10(300.013): 2.47714
std::log10(400.013): 2.60207
std::log10(500.013): 2.69898
std::log10(600.013): 2.77816
std::log10(700.013): 2.84511
std::log10(800.013): 2.9031
std::log10(900.013): 2.95425
std::log10(-0.01314): nan
std::log10(-100.013): nan
std::log10(-200.013): nan
std::log10(-300.013): nan
std::log10(-400.013): nan
std::log10(-500.013): nan
std::log10(-600.013): nan
std::log10(-700.013): nan
std::log10(-800.013): nan
std::log10(-900.013): nan
typeid(long double).name(): e
std::log10(0.001314): -2.8814
std::log10(100.001): 2.00001
std::log10(200.001): 2.30103
std::log10(300.001): 2.47712
std::log10(400.001): 2.60206
std::log10(500.001): 2.69897
std::log10(600.001): 2.77815
std::log10(700.001): 2.8451
std::log10(800.001): 2.90309
std::log10(900.001): 2.95424
std::log10(-0.001314): nan
std::log10(-100.001): nan
std::log10(-200.001): nan
std::log10(-300.001): nan
std::log10(-400.001): nan
std::log10(-500.001): nan
std::log10(-600.001): nan
std::log10(-700.001): nan
std::log10(-800.001): nan
std::log10(-900.001): nan