swift - 做简单数学时的奇怪结果

标签 swift math

我的代码是

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/

相关文章:

ios - Invalid Bundle - dylib 搜索路径中不存在您的应用程序引用的一个或多个动态库 | Xcode 13.3

swift - 没有这样的模块 'SwiftyDropbox'

c - 如何在C中连接两个整数

python放入列表

algorithm - 在没有幂函数的情况下计算for循环中的小数指数

swift - 在命令行工具中获取资源路径

swift - 我可以在 firebase 上手动验证电子邮件/密码帐户吗?

javascript - 将excel公式转换为JS?

math - bc算术错误

ios - CvVideoCamera - 相机不可用,Iphone 模拟器