gpt4 book ai didi

c# - 我应该使用查找列表而不是大量乘法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:01 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个非常大的字节数组,它是一个扁平的 3 维数组,我们使用 3 个嵌套的 for 循环 (x, y, z) 填充数组,然后我们通过使用一点点来获得我们想要的值一点数学,最具体地说:

获取数组中的索引:

return x + z*SizeX + y*SizeX*SizeZ;

并在给定索引的情况下返回 x/y/z 坐标:

int index = pos;
var y = (ushort) (pos/SizeX/SizeZ);
pos -= y*SizeX*SizeZ;
var z = (ushort) (pos/SizeX);
pos -= z*SizeX;
var x = (ushort) pos;

return new BlockPos(x, y, z, index, this);

首先,我想第二个可以变得更有效率,我只是不知道该怎么做,任何帮助将不胜感激:P

我的主要问题是,为 y 和 x 值创建一个查找表(在加载类时填充)对我来说会更快还是只将乘法留在其中会更快?

编辑这个数学在某些情况下被称为 LOT,所以如果它更快,即使对于更长的启动时间,它也会产生更好的差异。

最佳答案

大多数语言和架构中,乘法将成为一条(或几条)机器指令。虽然这些指令可能相对昂贵,但它们仍然比执行查找操作便宜 - 而且查找操作很可能无论如何都需要乘法。

例如“找到数组的第 4 个元素”将是

<array base address> + (3 * <array element size>)

鉴于您的伪代码,我建议的唯一优化是执行一次“常量”操作(例如 SizeX*SizeZ),然后存储这些结果。

关于c# - 我应该使用查找列表而不是大量乘法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12346323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com