C++程序计算给定值的以2为底的对数
在不同的应用程序中,计算以2为底的对数是必要的。有一些快捷方法可以记住一些对数值以备竞争性考试使用。在编程中,我们有很多选项可以使用库函数计算对数结果,也有一些技巧可以计算它们。在这篇文章中,我们将讨论一些在C++中计算给定数字以2为底的对数的技巧。
使用log2()函数
log2()是一个库函数,用于计算给定参数以2为底的对数。答案可能是整数或浮点数。使用这种方法非常简单,它需要cmath库来导入此函数,然后只需使用数值参数调用它,它将自动计算该数字以2为底的对数。让我们看看语法和相应的程序来了解其用法。
语法
#include < cmath > Log2( <number> )
算法
- 输入一个数字x。
- 使用log2(x)计算x的以2为底的对数。
- 返回结果。
示例
#include <iostream> #include <cmath> using namespace std; float solve( int x ) { float answer; answer = log2( x ); return answer; } int main() { cout << "Log base 2 for input x = 32 is: " << solve( 32 ) << endl; cout << "Log base 2 for input x = 1024 is: " << solve( 1024 ) << endl; cout << "Log base 2 for input x = 568 is: " << solve( 568 ) << endl; cout << "Log base 2 for input x = 1059 is: " << solve( 1059 ) << endl; }
输出
Log base 2 for input x = 32 is: 5 Log base 2 for input x = 1024 is: 10 Log base 2 for input x = 568 is: 9.14975 Log base 2 for input x = 1059 is: 10.0485
使用其他底数的对数函数
对数有一些有趣的性质。我们可以从任何底数计算另一个底数的对数结果。要使用任何对数底数k计算log2(x),可以使用以下公式:
$$\log_{2}({x})\:=\:\frac{\log_{k}{x}}{\log_{k}{2}}$$
算法
- 输入一个数字x。
- nume := log-base-k(x)。
- deno := log-base-k(2)。
- 返回(nume / deno)。
示例
#include <iostream> #include <cmath> using namespace std; float solve( int x ) { float nume, deno; nume = log( x ); deno = log( 2 ); return nume / deno; } int main() { cout << "Log base 2 for input x = 32 is: " << solve( 32 ) << endl; cout << "Log base 2 for input x = 1024 is: " << solve( 1024 ) << endl; cout << "Log base 2 for input x = 568 is: " << solve( 568 ) << endl; cout << "Log base 2 for input x = 1059 is: " << solve( 1059 ) << endl; }
输出
Log base 2 for input x = 32 is: 5 Log base 2 for input x = 1024 is: 10 Log base 2 for input x = 568 is: 9.14975 Log base 2 for input x = 1059 is: 10.0485
使用位运算符
也可以使用位移运算符计算以2为底的对数,但这只适用于整数,或者结果将是地板值。我们知道幂是将一个数字自身相乘多次。在这里我们做反向操作,将数字多次除以2,并计算我们可以除多少次,结果是1或更多。现在将数字除以2类似于向右移动1位,所以这可以使用位移运算符完成,这比移位更快。让我们看看算法以便更好地理解。
算法
- 输入一个数字x。
- count := -1。
- 当x非零时,执行。
- x := x向右移动1位后的结果。
- count := count + 1。
- 返回count。
示例
#include <iostream> #include <cmath> using namespace std; float solve( int x ) { int count = -1; while ( x > 0 ) { count++; x = x >> 1; } return count; } int main() { cout << "Log base 2 for input x = 32 is: " << solve( 32 ) << endl; cout << "Log base 2 for input x = 1024 is: " << solve( 1024 ) << endl; cout << "Log base 2 for input x = 568 is: " << solve( 568 ) << endl; cout << "Log base 2 for input x = 1059 is: " << solve( 1059 ) << endl; }
输出
Log base 2 for input x = 32 is: 5 Log base 2 for input x = 1024 is: 10 Log base 2 for input x = 568 is: 9 Log base 2 for input x = 1059 is: 10
在这个输出中可以看到,对于最后两个输入,结果是整数格式,这些是实际以2为底的对数结果的地板值。因此,移位运算符只能用于基于整数的结果。
结论
可以使用基于cmath库的log2()方法计算以2为底的对数。这将返回整数或分数结果。另一种方法是使用另一个对数底数和一个小的对数公式,如第二节所示。我们讨论的第三种方法是使用位移运算符。我们将结果一次一位地向右移动,并在数字达到0时增加计数器以获得最终结果。这种方法更快,但仅当我们需要整数或地板值结果时才能很好地工作。在这个解决方案中,小数部分被删除了。我们还可以使用数值方法通过使用二分法、牛顿-拉夫森法或任何其他非线性方程求解方法来计算对数结果,以获得更精确的结果。
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP