【问题标题】:Why does C++ think 8^1/3 = 1?为什么 C++ 认为 8^1/3 = 1?
【发布时间】:2015-08-08 02:09:14
【问题描述】:

我在 C++ 中测试 pow() 函数

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    cout << pow(8,(1/3)) << endl;
    return 0;
}

由于某种原因,这返回 1。为什么会发生这种情况?

【问题讨论】:

  • 检查“整数除法”。尝试打印1/3的结果
  • 因为 C++ 知道它在做什么。
  • 为什么你测试了pow函数却没有测试1/3是什么?

标签: c++ pow


【解决方案1】:

这是因为1/3 是以整数计算的。除法的结果是0,所以pow(x, 0) 产生1

将除法更改为双精度除法,如下所示:

cout << pow(8,(1.0/3)) << endl; // prints 2 as expected

Demo.

【讨论】:

    【解决方案2】:

    1/3 产生一个整数结果 0

    【讨论】:

      【解决方案3】:

      当您使用整数作为 pow() 函数的输入时,计算机会截断输出。如果您输入浮点数,错误将得到纠正

      pow(8, 1/3) = 1

      pow(8.0, 1.0/3) = 2

      【讨论】:

      • 整数除法结果被截断,而不是取整。
      • 绝对正确。即使结果相同,截断与地板的术语更正确
      • 在这种情况下结果是一样的,但对于负数则不然。
      • 是的,当然我的意思是这个例子的结果是一样的。负数截断不会下降。已修改答案以使用正确的术语。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2010-10-02
      • 1970-01-01
      • 2014-07-25
      • 2021-05-16
      • 1970-01-01
      • 2015-04-08
      相关资源
      最近更新 更多