我已经读过双精度和单精度之间的区别。 但是,在大多数情况下, float和double float似乎是可互换的,即,使用一个或另一个似乎不影响结果。 真的是这样吗? 花车和双打何时可以互换? 它们之间有什么区别?

#1楼

双精度为64,单精度(浮点数)为32位。

双精度数的尾数较大(实数的整数位)。

任何不准确之处都会加倍。

#2楼

浮点数的精度低于双精度数。 尽管您已经知道,但请阅读有关浮点算法的知识,以更好地理解。

#3楼

以下是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 ++标准增加了:

浮点类型的值表示形式是实现定义的。

我建议看一看优秀的每位计算机科学家应该了解的关于浮点算法的知识 ,该算法深入地涵盖了IEEE浮点标准。 您将了解表示的详细信息,并且将意识到在幅度和精度之间要进行权衡。 浮点表示的精度随着幅度的减小而增加,因此-1和1之间的浮点数是精度最高的数字。

#4楼

使用浮点数时,您不能相信本地测试将与在服务器端进行的测试完全相同。 您的本地系统以及最终测试的运行环境和编译器可能有所不同。 在某些TopCoder竞赛中,我曾多次看到此问题,尤其是当您尝试比较两个浮点数时。

#5楼

浮点计算中涉及的数字大小不是最相关的东西。 相关的是正在执行的计算。

本质上,如果您正在执行计算并且结果是一个无理数或重复的小数,那么当该数字被压缩为您使用的有限大小的数据结构时,将出现舍入错误。 由于double是float大小的两倍,因此舍入误差会小很多。

测试可能专门使用了会导致这种错误的数字,因此测试了您在代码中使用了适当的类型。