Swift float计算与其他语言不同

时间:2019-01-30 08:29:36

标签: swift

我正在尝试在Swift中将RGB值转换为YUV值。 支持RGB值为(185,206,201)。 转换代码:

let yExp  = simd_float3(0.299, 0.587, 0.114)
let cbExp = simd_float3(-0.16874, -0.33126, 0.5)
let crExp = simd_float3(0.5, -0.41869, -0.08131)

let red   = Float(185)
let green = Float(206)
let blue  = Float(201)
let pixel = simd_float3(red, green, blue)

let y  = simd_dot(yExp, pixel)
let cr = simd_dot(crExp, pixel) + 128.0
let cb = simd_dot(cbExp, pixel) + 128.0

cr在Swift中是129.043549。但是,当我使用C#或Java时,结果为129.043533。

如何在Swift中获得与C#和Java相同的结果?

1 个答案:

答案 0 :(得分:0)

谢谢大家。我找到了解决方案,但这可能不是完美的解决方案。

let yExp  = simd_double3(0.299, 0.587, 0.114)
let cbExp = simd_double3(-0.16874, -0.33126, 0.5)
let crExp = simd_double3(0.5, -0.41869, -0.08131)

let red   = Double(185)
let green = Double(206)
let blue  = Double(201)
let pixel = simd_double3(red, green, blue)

let y  = Float(simd_dot(yExp, pixel))
let cr = Float(simd_dot(crExp, pixel) + 128.0)
let cb = Float(simd_dot(cbExp, pixel) + 128.0)

cr从double转换为float时将为129.04353。