首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift :常规部门和vDSP.divide或vDSP_vsdiv的不同输出

Swift :常规部门和vDSP.divide或vDSP_vsdiv的不同输出
EN

Stack Overflow用户
提问于 2022-10-26 13:36:49
回答 1查看 37关注 0票数 0

我有一个来自RGB图像的浮动数组,我想将它除以255。我希望它尽可能快,我尝试使用vDSP操作。但是,输出不匹配。

我尝试了以下几点:

代码语言:javascript
运行
复制
///Image vectors: imageFloatArray1 == imageFloatArray2 == imageFloatArray3
let numSamples = width * height * 3;
var factor : Float = 255.0

var scaledFloats1: [Float] = Array(repeating: 0.0, count: numSamples)
var scaledFloats2: [Float] = Array(repeating: 0.0, count: numSamples)
var scaledFloats3: [Float] = Array(repeating: 0.0, count: numSamples)

//Case 1: Original approach however too slow
scaledFloats1 = imageFloatArray1.map{$0 / factor}

//Case 2: vDSP.divide 
scaledFloats2 = vDSP.divide(imageFloatArray2, factor)

//Case 3: vDSP_vsdiv
vDSP_vsdiv(&imageFloatArray3, 1, &factor, &scaledFloats3, 1, vDSP_Length(numSamples))

/// Output all have same size but case 2 and 3 output values differ from case 1

有人能解释这事是不是真的发生了吗?如果是的话,是否有任何更快的替代方案来替代第一种情况?

map和vsdiv之间10个不同值的样本输出:

代码语言:javascript
运行
复制
"different values count: " 96892 /// of 196608 values
"map value: 0.23529411852359771728515625000000"
"vsdiv value: 0.23529413342475891113281250000000"
"map value: 0.19215686619281768798828125000000"
"vsdiv value: 0.19215688109397888183593750000000"
"map value: 0.11372549086809158325195312500000"
"vsdiv value: 0.11372549831867218017578125000000"
"map value: 0.24705882370471954345703125000000"
"vsdiv value: 0.24705883860588073730468750000000"
"map value: 0.22745098173618316650390625000000"
"vsdiv value: 0.25490197539329528808593750000000"
"map value: 0.19215686619281768798828125000000"
"vsdiv value: 0.16862745583057403564453125000000"
"map value: 0.22352941334247589111328125000000"
"vsdiv value: 0.22745099663734436035156250000000"
"map value: 0.09411764889955520629882812500000" <- big difference
"vsdiv value: 0.26666668057441711425781250000000" <-
"map value: 0.22745098173618316650390625000000" 
"vsdiv value: 0.19215688109397888183593750000000"
"map value: 0.23529411852359771728515625000000"
"vsdiv value: 0.25490197539329528808593750000000"
EN

回答 1

Stack Overflow用户

发布于 2022-10-26 15:07:00

你表现出来的差异太小了,不用担心。我做了一些谷歌搜索,看起来浮动大约有6位数的精确性。在噪音中,你的答案是不同的。这种差异很可能是由于底层二进制数学算法的不同实现造成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74208768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档