【问题标题】:Explain the method of pow function of math.h in C [duplicate]解释C中math.h的pow函数的方法[重复]
【发布时间】:2017-10-31 19:36:42
【问题描述】:

我学习了 C#,但我想学习 C,然后学习 C++ 的 OOP。现在我正在使用 C 中的库 math.h 和 pow(x,y) 函数。
我正在用这段代码编写一个程序:
enter image description here
我得到了一些非常奇怪的东西。结果是:
enter image description here

我的问题是关于 pow 的。它有什么作用?
是否可以向我解释为什么会出现这种情况?看不懂。
感谢您的帮助,我也为我的英语感到抱歉。

【问题讨论】:

  • 请不要把错误的打印屏幕,把你在问题中的实际信息,作为文本。另外,当你已经在学习 C# 的时候,学习 C++ for OOP,真的吗?
  • 1/4 = 0 因为 14 都是整数文字。当你将它们相除时,你会得到一个整数作为结果,余数被去掉。
  • 我更新它。 “当你已经在学习 C# 时,为 OOP 学习 C++”,因为 C++ 需要低内存,我必须在某些程序中使用它。
  • 除了整数除法导致整数的问题之外,测试用例 #5 和 #6 实际上并没有测试您的想法(您正在调用 printf() 以及其他一些 @987654327 的结果@ 表达式,notnumber),最后一个测试用例 (pow(3200000, 0.20)) 确实产生了正确的结果。
  • 除了 AntonH 所说的,请不要发布您所询问的代码的屏幕截图。复制并粘贴。

标签: c


【解决方案1】:

编译器将“1/4”视为整数除法。

这意味着它首先进行除法,计算结果为 0.25,然后将其转换为整数(舍弃小数),留下 0。任何以 0 为次方的数字都是 1。

在 1 和 4 之后添加小数点让编译器知道您希望除法的结果是双精度数,因此它将结果保持为 0.25。

下面是一些示例代码:

 #include <stdio.h>
 #include <math.h>

int main()
{
    double number = 1/4;
    printf("Integer Division: %f\n", number); //prints 0

    number = 1.0/4.0;
    printf("Double Division: %f\n", number); //prints 0.25

    return 0;
}

【讨论】:

    【解决方案2】:

    您的代码的主要问题是您必须了解 C 可以处理的几种本机类型的操作是如何处理的。

    如果两个运算符都是整数,除法操作 (/) 将返回一个整数。

    即:

    1 / 4 == 0
    

    而不是您所期望的 0.25

    因此,在行中:

    number = pow(160000, 1 / 4);
    

    你实际执行的是:

    number = pow(160000, 0);
    

    而且我们知道任何基数的 0 次幂都等于 1

    【讨论】:

    • 我知道……我的问题是关于战俘的!!
    • 您在行中的评论 // 我们知道 1/4 = 0.25 不符合那个理解
    • 1 / 4 != 1 实际上:) 我猜你的意思是说0
    • 是的!对于那个很抱歉!更正了结果。谢谢@FreeNickname
    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2023-04-02
    • 2019-04-10
    • 2012-06-02
    • 2015-08-04
    相关资源
    最近更新 更多