尝试用c++计算对数



所以如果我正确理解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;
}

相关内容

  • 没有找到相关文章

最新更新