swift - 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 相同的结果?
解决方案
多谢你们。我找到了解决方案,但它可能不是完美的解决方案。
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。
推荐阅读
- python - 在numpy中获取没有循环的集群中元素的坐标
- python - Viber bot 不发送回复消息
- python - 为什么我的 Swift 表现得比我的 Python 慢?
- google-cloud-platform - 如何在 Dataprep 中将时间戳转换为日期时间格式?
- java - 印刷波浪状结构
- java - Springboot mvn clean install 没有定义属性持有者?
- azure - 如何判断 Azure Function App 是否会重新启动?
- java - 如何估计Android中的方法CPU时间?
- python - 使用 show 的 Pyspark 数据帧很慢
- python - 公共 github 的密码保护