我有一种数学方法,可以执行线性近似。 当我在计算器或wolframAlpha上执行此计算时,它是正确的。但是在Swift中,它返回错误的值。
有一些我不知道的数学规则
此处的方法: 示例:
correctValues(f1: 0.099, f2: 0.201, x: 150, x1: 100, x2: 200)
class func correctValues( f1: Decimal, f2: Decimal, x: Decimal, x1: Decimal, x2:Decimal ) {
let time = f1 + (f2 - f1)
let distance = (x - x1)/(x2 - x1)
let result = time * distance
print(result)
// result output 0.1005
我希望该值为0.15
编辑:
如前所述,为了在这种方法中使用线性插值公式,在计算它们之前,我需要将公式的两个部分放回去,以遵循数学中简单的排序规则。
因此,为了获得正确的结果,我需要这样做:
let distance = (x-x1)/(x2-x1)
let result = f1 + (f2-f1) * distance
print(result)
// output 0.15
答案 0 :(得分:-2)
如果您想确信自己的计算是正确的,则可以逐步打印。您可以查看swift是否将结果四舍五入。
func correctValues( f1: Double, f2: Double, x: Double, x1: Double, x2:Double ) {
// f1: 0.099, f2: 0.201, x: 150.0, x1: 100.0, x2: 200.0
print("f1: \(f1), f2: \(f2), x: \(x), x1: \(x1), x2: \(x2)")
let time = f1 + (f2 - f1)
// time: 0.201
print("time: \(time)")
let distance = (x - x1)/(x2 - x1)
// distance: 0.5
print("distance: \(distance)")
let result = time * distance
// result: 0.1005
print("result: \(result)")
}
correctValues(f1: 0.099, f2: 0.201, x: 150, x1: 100, x2: 200)
您也可以将调试器与Xcode一起使用。但是结果0.1005是正确的。