我已经读过双精度和单精度之间的区别。 可是,在大多数状况下, float
和double
float
彷佛是可互换的,即,使用一个或另外一个彷佛不影响结果。 真的是这样吗? 花车和双打什么时候能够互换? 它们之间有什么区别? 算法
浮点数的精度低于双精度数。 尽管您已经知道,但请阅读有关浮点算法的知识,以更好地理解。 服务器
如下是C99标准(ISO-IEC 9899 6.2.5§10)或C ++ 2003(ISO-IEC 14882-2003 3.1.9§8)标准说: 数据结构
共有三种浮点类型:
float
,double
和long double
。double
类型至少提供与float
同样高的精度,long double
类型至少提供与double
同样高的精度。float
类型的值集是double
类型的值集的子集;double
类型的值集合是long double
类型的值集合的子集。 测试
C ++标准增长了: spa
浮点类型的值表示形式是实现定义的。 code
我建议看一看优秀的每位计算机科学家应该了解的关于浮点算法的知识 ,该算法深刻地涵盖了IEEE浮点标准。 您将了解表示的详细信息,而且将意识到在幅度和精度之间要进行权衡。 浮点表示的精度随着幅度的减少而增长,所以-1和1之间的浮点数是精度最高的数字。 get
使用浮点数时,您不能相信本地测试将与在服务器端进行的测试彻底相同。 您的本地系统以及最终测试的运行环境和编译器可能有所不一样。 在某些TopCoder竞赛中,我曾屡次看到此问题,尤为是当您尝试比较两个浮点数时。 编译器
浮点计算中涉及的数字大小不是最相关的东西。 相关的是正在执行的计算。 io
本质上,若是您正在执行计算而且结果是一个无理数或重复的小数,那么当该数字被压缩为您使用的有限大小的数据结构时,将出现舍入错误。 因为double是float大小的两倍,所以舍入偏差会小不少。 编译
测试可能专门使用了会致使这种错误的数字,所以测试了您在代码中使用了适当的类型。