double函数仅返回-0

double function only returning -0

本文关键字:返回 函数 double      更新时间:2023-10-16

我有两个函数,它们是我作为练习编写的一个较大函数的一部分。这些功能的目的是将温度从华氏度转换为摄氏度,反之亦然。

我从开始

#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;
}

但是华氏度到摄氏度函数无论采用什么参数都会返回-0

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

第二个怎么了?我看不出任何结构上的差异会导致一个工作而另一个不工作。

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

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

在C++中,除法的结果类型取决于操作数的类型,而不是最准确地表示结果的类型。换句话说,5/9是整数除法,并且将被截断为0。如果你使用5.0/9.0之类的东西,它会以双倍精度计算,很可能会给你一个你想要的结果。

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