为什么数学方法返回错误的值

时间:2019-07-12 07:54:48

标签: swift math methods

我有一种数学方法,可以执行线性近似。 当我在计算器或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

1 个答案:

答案 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是正确的。