问题描述
我想做 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.pi
和 Double.pi
都是通过在 Float
或 Double
类型中尽可能准确地表示 π 的数学值而不超过数学值(π 的值是四舍五入到零方向上最接近的可表示值)。所以 Float.pi
和 Double.pi
有不同的值,减去它们产生大约 1.5•10−7。
此外,您在使用默认格式打印 Float.pi
或 Double.pi
时看到的十进制数字并不是计算机内部的实际值。 Float
和 Double
都使用二进制格式,其中每个数字都表示为一个有效数(实际上是某个整数)乘以 2 的负幂(包括 2 的负幂,例如 2−34,例如)。所以Float.pi
的实际值为3.141592502593994140625,而Double.pi
的实际值为3.14159265358979311599796346854418516159057617187