android - 如何使用 logb 将 android 数学函数转换为 swift
问题描述
大家好,我一直在 android 应用程序上使用公式
valor = Math.pow(2.7183d, (((1.17896d * diametro) / 100.0d) + (0.8241d * logb(diametro / 100.0d, 2.7183d))) + 3.4987d);
现在我在 Swift ios 中实现,但我找不到logb(double,double)的解决方案,在 swift 上唯一活跃的是logb(double)
resultado = pow(2.7183, (((2.006969 * diametro!) / 100.0) - (0.445893 * logb(diametro! / 100.0, 2.7183))) + 2.755621)
但我得到“编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式”
解决方案
从您的示例中,它似乎logb(double, double)
是一个对数函数,它将日志返回到指定的base
. Swift 没有等价物,但您可以使用标准log
函数编写自己的:
func logbase(_ n: Double, _ base: Double) -> Double {
return log(n) / log(base)
}
也就是说,您的原始函数logb
用于查找与自然使用2.7183
的基数相同的基数的对数log
(嗯,到小数点后 4 位),所以
logbase(n, 2.7183)
和
log(n)
基本上给出相同的结果。
此外,您的公式pow(2.7183, n)
用于将基础提高2.7183
到幂。
但
pow(2.7183, n)
和
exp(n)
给出类似的结果(只是不同,因为exp
使用了更准确的值e
- 自然对数的底)。
把它们放在一起,你的公式可以写成:
let valor = exp( ((1.17896 * diametro) / 100.0) + (0.8241 * log(diametro / 100.0)) + 3.4987 )
推荐阅读
- ios - UIAlertController 在 swift 3 的启动视图中不起作用
- javascript - 如何让组件根据用户在单独组件中单击的链接显示不同的内容?
- eclipse - 安装vue.js codemix后无法打开eclipse
- c++ - C ++ wcout utf-16 编码的字符数组如何?
- git - 带有 .gitattributes 设置和 repo 初始克隆的 Catch-22
- ruby-on-rails - Rails在地图内加入数组而不转义
- python - 如何检查用户是否单击了 Selenium 中的按钮?
- python - INNER JOIN 两个临时表在 postgresql usibn python 中没有响应
- python - 计算两个排序列表中位数的相反分区
- sql - 查找过去 1 年没有请过单假的员工