c++ - 双函数只返回 -0

标签 c++ function

我有两个函数作为我正在编写的一个更大函数的一部分作为练习。这些函数的目的是将华氏温度转换为摄氏温度,反之亦然。

我开始于:

#include <iostream>
using namespace std;
double Celsius_to_Fahrenheit(double);
double Fahrenheit_to_Celsius(double);

摄氏度到华氏度工作正常:

double Celsius_to_Fahrenheit(double C){
    double F = ((9 / 5)*C + 32);
    return F;
}

但是 Fahrenheit-to-Celsius 函数返回 -0 无论它采用什么参数:

double Fahrenheit_to_Celsius(double F){
    double C = ((5 / 9)*(F - 32));
    return C;
}

第二个有什么问题?我看不出有任何结构差异会导致一个起作用而另一个不起作用。

编辑:我只测试了 0 上的函数,两个函数都会因非平凡的参数而中断!更糟糕的是!

最佳答案

实际上我认为这两个函数都失败了。您只是没有注意到 C-to-F 失败,因为您得到了非零结果。

在 C++ 中,除法的结果类型取决于操作数的类型,而不是最准确地表示结果的类型。换句话说,5/9 是整数除法,将被截断为 0。如果您使用 5.0/9.0 之类的东西,它会以 double 进行数学运算,并且很可能会得到这样的结果你想要的。

如果您对截断的结果感到满意,您可以重新排列项,使其尽可能晚地进行舍入:double C = ((F - 32) * 5/9);

关于c++ - 双函数只返回 -0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358380/

相关文章:

java - 用于 fovy 和 aspect 透视的 OpenGL 投影矩阵

C++ 成员初始化列表

java - 如何根据另一个数组的条件自动设置数组值?

删除高度相关的变量

javascript 使用循环来更改具有特定类的每个元素的显示

javascript - 访问 Javascript ES6 类中声明的函数(ES2015?ES16?)

c++ - 头文件。 ETC

c++ - crossplatfom 从 std::string 转换为 'const TCHAR *' 的正确方法

c++ - Win32 位图彩色转灰度

php - 是否可以在stdClass下定义函数