简单的C++代码:
#include "../../std_lib_facilities.h"
#include <float.h>
double ctok(double c){
const double koef_c_2_k = 274.15;
double k = c + koef_c_2_k;
if(k < -koef_c_2_k) error("Output abroad range of admissible values.");
return k;
}
int main(){
cout << "Max double value: " << DBL_MAX << endl;
double c = 0;
cout << "Celsius: ";
cin >> c;
double k = ctok(c);
cout << "Kelvin: " << k << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
bush @ host-nix:〜/ cpp/bs/5/5.2 $ ./a.out
最大双值:1.79769e + 308
摄氏度:0
开尔文:274.15
bush @ host-nix:〜/ cpp/bs/5/5.2 $ ./a.out
最大双值:1.79769e + 308
摄氏度:100
开尔文:374.15
bush @ host-nix:〜/ cpp/bs/5/5.2 $ ./a.out
最大双值:1.79769e + 308
摄氏度:-100
Kelvin:174.15
bush @ host-nix:〜/ cpp/bs/5/5.2 $ ./a.out
Max double value:1.79769e + 308
Celsius:1.79769e + 308
Kelvin:1.79769e + 308
bush @ host -nix:〜/ CPP/BS/5/5.2 $
在最后一种情况下,我设置摄氏度的最大值,我等待错误消息,但我得到了错误的开尔文值.为什么会这样?
谢谢.
1.79769e+308+ 274.15好像你正在向海洋添加一杯水.
实数的精确度是有限的,你的比较在计算机世界中是不明智的.
您不能同时将单个double变量用于非常小和非常大的数字.定义范围,您的解决方案应该是微观的或宏观的.