ZetCode

FreeBasic Double 关键字

最后修改日期:2025 年 6 月 16 日

FreeBasic 的 Double 关键字表示双精度浮点数据类型。它比 Single 类型提供了更大的范围和更高的精度,使其适用于科学和金融计算。

基本定义

在 FreeBasic 中,Double 是一种 64 位浮点数据类型。它可以存储大约 ±5.0×10⁻³²⁴ 到 ±1.7×10³⁰⁸ 之间的值,具有 15-16 位有效数字的精度。

对于需要高精度或处理非常大/小数值的计算,Double 变量至关重要。它们遵循 IEEE 754 浮点运算标准。

声明 Double 变量

此示例展示了如何声明和初始化 Double 变量。

double_declare.bas
Dim pi As Double = 3.141592653589793
Dim distance As Double = 1.495978707e8 ' km to Sun
Dim tinyValue As Double = 1.0e-300

Print "Pi: "; pi
Print "Distance to Sun: "; distance; " km"
Print "Tiny value: "; tinyValue

这里我们声明了三个不同数量级的 Double 变量。第一个以高精度存储 π。第二个显示大数的科学计数法。第三个演示了极小的值。

Double 算术运算

Double 变量支持所有标准算术运算,并具有高精度。

double_arithmetic.bas
Dim x As Double = 123456789.123456789
Dim y As Double = 987654321.987654321

Print "Addition: "; x + y
Print "Subtraction: "; y - x
Print "Multiplication: "; x * y
Print "Division: "; y / x
Print "Square root: "; Sqr(x)

此示例演示了 Double 值的基本算术运算。请注意,即使对于大数,运算也如何保持精度。Sqr 函数返回 Double 类型的结果。

Double 精度比较

由于精度的限制,比较浮点值需要特别考虑。

double_comparison.bas
Dim a As Double = 0.1 + 0.2
Dim b As Double = 0.3

Print "a = "; a
Print "b = "; b
Print "a == b: "; (a = b)
Print "Approximately equal: "; (Abs(a - b) < 0.0000001)

由于二进制浮点表示,0.1 + 0.2 的结果并不完全等于 0.3。这说明了为什么精确相等比较经常在浮点数运算中失败。我们改用 epsilon 比较。

数学函数中的 Double

许多数学函数返回或接受 Double 值以保证精度。

double_math.bas
Dim angle As Double = 45.0 ' degrees
Dim radians As Double = angle * (3.141592653589793 / 180.0)

Print "Sin: "; Sin(radians)
Print "Cos: "; Cos(radians)
Print "Tan: "; Tan(radians)
Print "Log: "; Log(100.0)
Print "Exp: "; Exp(1.0)

这演示了使用 Double 值进行三角函数和对数函数运算。这些函数返回 Double 类型的结果,在计算过程中保持精度。请注意度到弧度的转换。

Double 数组

Double 值数组在科学和工程数据中很有用。

double_array.bas
Dim temperatures(1 To 5) As Double = { 98.6, 101.2, 97.9, 99.4, 100.1 }

Dim sum As Double = 0.0
For i As Integer = 1 To 5
    sum += temperatures(i)
Next

Dim average As Double = sum / 5.0
Print "Average temperature: "; average

此示例在 Double 数组中存储温度读数。我们计算平均值,同时保持精度。Double 数组是数值数据处理的理想选择。

Double 类型转换

FreeBasic 可以在 Double 和其他数值类型之间进行转换。

double_conversion.bas
Dim d As Double = 123.456
Dim i As Integer = d
Dim s As Single = d

Print "Double: "; d
Print "To Integer: "; i
Print "To Single: "; s
Print "Back to Double: "; CDbl(i)

这显示了隐式和显式转换。转换为 Integer 会截断小数部分。转换为 Single 可能会丢失精度。CDbl 函数将值转换回 Double。

Double 特殊值

Double 可以表示无穷大和 NaN 等特殊浮点值。

double_special.bas
Dim inf As Double = 1.0 / 0.0
Dim nan As Double = 0.0 / 0.0

Print "Infinity: "; inf
Print "NaN: "; nan
Print "Is Infinity: "; IsInfinity(inf)
Print "Is NaN: "; IsNaN(nan)

这演示了 Double 的特殊值。除以零会产生无穷大。0/0 会产生 NaN(非数字)。FreeBasic 提供了检测这些特殊情况的函数。

最佳实践

本教程介绍了 FreeBasic 的 Double 关键字,并通过实际示例展示了其在不同场景下的用法。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 FreeBasic 教程