你如何在 Swift 中减去 Double.pi 和 Float.pi?

问题描述

我想做 Double.pi - Float.pi,但出现错误

二元运算符“-”不能应用于“Double”和“Float”类型的操作数。

当我将 Float 转换为 Double 或将 Double 转换为 Float 时(例如:Double(Float.pi)),结果是错误的。我该如何减去它们?

let floatPi = Float.pi
let Pi = Double.pi
print("float pi = \(floatPi)")
print("double pi = \(Pi)")
let substraction = Pi - floatPi
print(substraction)

以上结果如下:

浮动圆周率 = 3.1415925

双圆周率 = 3.141592653589793

错误:MyPlayground.playground:20:23:错误:二元运算符“-”不能应用于“Double”和“Float”类型的操作数 让减法 = Pi - floatPi

当我尝试这个时:

let floatPi = Double(Float.pi)

结果是:

浮动 pi = 3.141592502593994

双圆周率 = 3.141592653589793

1.5099579897537296e-07

解决方法

您看到差异的原因是 Double 可以更准确地表示 π 的值,因为它使用更多位以获得更高的精度。 Float.piDouble.pi 都是通过在 FloatDouble 类型中尽可能准确地表示 π 的数学值而不超过数学值(π 的值是四舍五入到零方向上最接近的可表示值)。所以 Float.piDouble.pi 有不同的值,减去它们产生大约 1.5•10−7

此外,您在使用默认格式打印 Float.piDouble.pi 时看到的十进制数字并不是计算机内部的实际值。 FloatDouble 都使用二进制格式,其中每个数字都表示为一个有效数(实际上是某个整数)乘以 2 的负幂(包括 2 的负幂,例如 2−34,例如)。所以Float.pi的实际值为3.141592502593994140625,而Double.pi的实际值为3.14159265358979311599796346854418516159057617187