我的代码是
let m = 39
let maxPower = pow(3.0, Double(m))
if (Int(maxPower) % 3) == 0 {
return true
} else {
return false
}
为什么返回false?
最佳答案
这是由于 Swift 中 Double
的精度(以及一般的 float )。运行
let power = pow(3.0, Double(39))
print(power)
会打印4.05255515301898e+18,但是339的实际值为4.052555153018976267e+18,或者4052555153018976267(注意最后的 76267)
运行时
let mod = 4052555153018976267 % 3
该值符合预期,为 0。正如 rob mayoff 指出的那样,double的实际存储值为4052555153018976256。运行时
let mod = 4052555153018976256 % 3
结果是 1,这就是你所经历的。这就是为什么运行时value
等于1的原因
let value = pow(3.0, Double(39)) % 3
关于swift - 做简单数学时的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35906164/