【问题标题】:C++ sqrt function returning truncated (wrong) output [duplicate]C ++ sqrt函数返回截断(错误)输出[重复]
【发布时间】:2019-04-15 11:04:31
【问题描述】:

我对 math.h 的函数 sqrt 有疑问

我在调试一些代码时发现我的函数不能正常工作,因为 2/3 的平方根总是返回零。

我试图通过在单独的文件中写下一些平方根计算来隔离问题,但该函数没有返回正确的值。

我错过了什么吗?

#include <math.h>
#include <iostream>

using namespace std;
int main(){
        cout << sqrt(2/3) << endl;
        cout << sqrt(16/2) << endl;
        cout << sqrt(9/2) << endl;
        return 0;

}

这是我收到的输出:

0
2.82843
2

正确的输出应该是:

0.81650
2.82843
2.12132

提前谢谢你。

【问题讨论】:

  • 某处有一个 dup...
  • @YSC 如果你能找到它,那将非常有帮助。除了有人说 sqrt(3) 在 gdb 中被评估为零之外找不到任何东西
  • @YSC 更像+Inf dupes,以保持与 IEEE 754 的精神
  • stackoverflow.com/questions/9764677/… 回答你的问题了吗?
  • @MicheleFattoruso 没有什么好羞愧的。算术的复杂性是 C/C++ 中最违反直觉的部分之一。

标签: c++ math.h


【解决方案1】:

1,2,4,8,9是整数常量,整数的算术结果永远是整数。

因此,您应该使用双常量,因此您应该尝试:

cout << sqrt(2.0/3.0) << endl;
cout << sqrt(16.0/2.0) << endl;
cout << sqrt(9.0/2.0) << endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2020-05-19
    • 2011-02-16
    • 1970-01-01
    • 2014-10-23
    • 2023-03-30
    相关资源
    最近更新 更多