C++ 仅返回-0的双函数
作为一个更大的函数的一部分,我有两个函数作为练习。这些功能的目的是将温度从华氏温度转换为摄氏温度,反之亦然 我首先说:C++ 仅返回-0的双函数,c++,function,C++,Function,作为一个更大的函数的一部分,我有两个函数作为练习。这些功能的目的是将温度从华氏温度转换为摄氏温度,反之亦然 我首先说: #include <iostream> using namespace std; double Celsius_to_Fahrenheit(double); double Fahrenheit_to_Celsius(double); 但无论采用何种参数,华氏温度到摄氏温度函数都返回-0: double Fahrenheit_to_Celsius(double F)
#include <iostream>
using namespace std;
double Celsius_to_Fahrenheit(double);
double Fahrenheit_to_Celsius(double);
但无论采用何种参数,华氏温度到摄氏温度函数都返回-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这样的东西,它会以双精度计算,很可能会给你一个你想要的结果
然而,如果你对一个被截断的结果感到满意,你可以重新排列这些术语,使其尽可能晚地进行四舍五入:双C=F-32*5/9 事实上,我认为这两种功能都失败了。你只是没有注意到C-to-F失败是因为你得到了一个非零的结果 <>在C++中,结果的类型取决于操作数的类型,而不是最能准确地表示结果的类型。换句话说,5/9是整数除法,将被截断为0。如果你使用像5.0/9.0这样的东西,它会以双精度计算,很可能会给你一个你想要的结果
然而,如果你对一个被截断的结果感到满意,你可以重新排列这些术语,使其尽可能晚地进行四舍五入:双C=F-32*5/9 欢迎来到整数除法的世界。试试双C=5.0/9.0*F-32.0;。摄氏到华氏温度的函数也不起作用。@user2357112我只在零上测试过它!我真傻!欢迎来到整数除法的世界。试试双C=5.0/9.0*F-32.0;。摄氏到华氏温度的函数也不起作用。@user2357112我只在零上测试过它!我真傻!
double Fahrenheit_to_Celsius(double F){
double C = ((5 / 9)*(F - 32));
return C;
}