首页 > 解决方案 > 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 相同的结果?

标签: swift

解决方案


多谢你们。我找到了解决方案,但它可能不是完美的解决方案。

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)

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


推荐阅读