首页 > 解决方案 > 如何使用 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)

但我得到“编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式”

标签: androidiosswift

解决方案


从您的示例中,它似乎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 )

推荐阅读