所以如果我正确理解c++和对数。这样就能得到我想要的底数了?
我有一些问题,但我认为这是一个正确的开始。
#include <iostream>
using namespace std;
int main(void)
{
int x = 2;
int y = 64;
int value = log x (y);
cout << value << endl;
return 0;
}
这应该显示"6",但我不确定如何真正使用对数库..
对数问题有三部分。基础,论点(也叫力量)和答案。你正在试着找出2(底数)必须乘以多少才能得到64(答案)。
所以与其处理幂和猜测。我们来数一数答案64除以底数的次数,直到得到1。
64 / 2 = 32
32 / 2 = 16
16 / 2 = 8
8 / 2 = 4
4 / 2 = 2
2 / 2 = 1
这里我们数了6行,所以你把答案64除以以2为底的6倍。这就等于2的6次方等于64。
要做到这一点,你需要math.h库。如果你不想用它。你可以做一个循环,不断地除以用户给出的基数。
int base = 0;
int answer = 0;
int exponent = 0;
cout << "Please type in your base";
cin >> base;
cout << "Please type in your answer";
cin >> answer;
while (answer != 1)
{
answer /= base;
exponent++
}
cout << "The exponent is " << exponent;
对数的实现在大多数情况下是一个泰勒函数,它将对数近似为以e为底。要获得任何其他底数的对数,您可以这样做:
#include <cmath>
double y = std::log(x)/std::log(base);
描述:
- std::log()以e为底的自然对数。
- y = result
- base =对数的底。比如2或10。
供参考:
- http://en.cppreference.com/w/cpp/numeric/math/log
- http://en.cppreference.com/w/c/numeric/math/log
- https://en.wikipedia.org/wiki/Logarithm
- https://en.wikipedia.org/wiki/Logarithm Change_of_base
- https://en.wikipedia.org/wiki/Taylor_series
- https://en.wikipedia.org/wiki/Taylor_series示例
这里有一个不使用math.h库的更好的实现。我可能有一些多余的代码,因为我已经用c++写了一年了。谢谢你的问题,它让我想重温我的c++ !
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float base = 0;
float answer = 0;
int exponent = 0;
cout.precision(4);
cout << "Please type in your base n";
cin >> base;
cout << "Please type in your answern";
cin >> answer;
cout << fixed;
while (answer > base)
{
answer /= base;
exponent++;
}
cout << "The exponent is: " << exponent << endl;
cout << "The Remainder is: " << fixed << answer << endl;
return 0;
}