注意:本文假定读者了解计算机科学的基础知识

报名参加计算机科学的许多新手程序员/学生都会提出与他们学习的计算机科学特定领域相关的常见问题。大多数初学者课程都是从现代计算机中使用的数字系统的主题开始的,包括二进制,十进制,八进制和十六进制。这些是计算机数字格式,是计算机(或计算器和任何其他类型的数字计算机)中数值的内部表示形式。这些值存储为“位分组”。

我们知道计算机用二进制数字集表示数据(即以1和0的组合,例如1111代表十进制系统中的15),因此有必要讲解用于表示动态数据的不同数字格式值范围,因为它们构成了任何类型的运算中计算/数字处理的基本块。一旦在教室中定义了数字系统(通常很差),学生就会倾向于使用具有一定精度和数字范围的相同类型(即浮点算术)内的不同数字格式。因此,他们被迫学习某些类型之间的细微差别。两种最常用的数据类型是Float和Double,虽然它们针对相同的需求(即浮点算术),但是它们的内部表示形式和对程序中计算的总体影响还是有很大差异。不幸的是,许多程序员错过了Flat和Double数据类型之间的细微差别,并最终在不应首先使用它们的地方滥用了它们。最终导致程序其他部分的计算错误。

在本文中,将使用C编程语言的代码示例来告诉您float和double之间的区别。让我们开始吧!

浮点数(Flat)和双精度数(Double)是用于浮点算术运算的数据表示形式,请考虑一下您在数学类中计算出的十进制数,例如:20.123、16.23、10.2等,它们不是整数(即,2、5、15等),因此它们需要考虑二进制中的分数。由于所得的十进制数字(即20.123、16.23等)无法轻松地以常规二进制格式(即Integer)表示。 Float和Double之间的主要区别在于,前者是单精度(32位)浮点数据,而后者是双精度(64位)浮点数据类型。 Double之所以称为“ double”,是因为它基本上是Float的双精度版本。如果您要计算大量的数字(考虑到数字中成千上万个0),则Double中的错误会更小,并且不会损失太多精度。

最好使用代码示例进行详细说明。以下是通过C语言提供的数学函数对Float和Double进行的操作:

#include <stdio.h>

int main() {

    float num1 = 1.f/82;

    float num2 = 0;

    for (int i = 0; i < 738; ++i)
        num2 += num1;

    printf("%.7g", num2);

    double num3 = 1.0/82;

    double num4 = 0;

    for (int i = 0; i < 738; ++i)
        num4 += num3;

    printf("%.15g", num4);

    getchar();

}

执行上面示例代码,得到以下结果:

9.000031

8.99999999999983

在这里,可以看到Float和Double的精度稍有不同,但答案却完全不同,尽管Double似乎比Float更为准确。以下是C语言中sqrt()函数的示例:

#include <stdio.h>
#include <math.h>

int main() {
    float num1 = sqrt(2382719676512365.1230112312312312);
    double num2 = sqrt(2382719676512365.1230112312312312);

    printf("%f", num1);
    printf("%f", num2);

    getchar();

}
48813108.000000

48813109.678778

在这里,可以看到Double答案的精度更高。

总而言之,最好使用Double进行浮点运算,因为在Double上运行的C语言中的几个标准数学函数以及现代计算机对于Double浮点计算都非常快速和高效。这样可以减少使用Float的需求,除非您需要对大量浮点数进行操作(例如,在大型数组中使用数以千计的0表示),或者您要在不支持double-精度浮点,因为许多GPU,低功耗设备和某些平台(ARM Cortex-M2,Cortex-M4等)尚不支持Double,那么您应该使用Float。此外,要记住的一件事是,某些GPU/CPU在Float处理中工作得更好/效率更高,例如在矢量/矩阵的计算中,因此您可能需要查看硬件规格手册/文档才能更好地决定应使用哪一种GPU/CPU。对于特定的机器。

在针对现代计算机的代码中,很少有理由使用Float而不是Double。 Double中的额外精度会减少但不能消除舍入错误或其他不精确度(可能导致程序其他部分出现问题)的可能性。许多数学函数或运算符都会转换并返回Double,因此您无需将数字强制转换为Float,因为这可能会失去精度。

总结

应该使用Float的地方:

  • 如果要针对单精度比双精度快的硬件。
  • 应用程序大量使用浮点运算,例如成千上万的数字和成千上万的0。
  • 做非常底层的优化。例如,使用特殊的CPU指令(即SSE,SSE2,AVX等),这些指令一次可处理多个数字/数组/向量。

在本文中,介绍了Float和Double之间的区别,应该在特定的地方使用哪一个。 可以说,最好在大多数地方盲目使用Double,尤其是在针对现代计算机的情况下,因为使用Double浮点算术导致低效率的可能性极小。

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Float和Double
本文链接:https://www.vsdiffer.com/vs/float-vs-double.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。