gpt4 book ai didi

python - 为什么 numpy 的按位左移在不同的系统上会给出不同的结果?

转载 作者:行者123 更新时间:2023-12-01 23:37:25 25 4
gpt4 key购买 nike

我在两个不同的系统上使用 numpy 的按位运算并得到不同/不一致的结果。经过一番调查后,我发现 left_shift 导致了问题。如果我执行以下操作:

xs = [i for i in range(100)]
np.left_shift(xs, xs)

在我得到的第一个系统上:

array([                   0,                    2,                    8,
24, 64, 160,
384, 896, 2048,
4608, 10240, 22528,
49152, 106496, 229376,
491520, 1048576, 2228224,
4718592, 9961472, 20971520,
44040192, 92274688, 192937984,
402653184, 838860800, 1744830464,
3623878656, 7516192768, 15569256448,
32212254720, 66571993088, 137438953472,
283467841536, 584115552256, 1202590842880,
2473901162496, 5085241278464, 10445360463872,
21440476741632, 43980465111040, 90159953477632,
184717953466368, 378231999954944, 774056185954304,
1583296743997440, 3236962232172544, 6614661952700416,
13510798882111488, 27584547717644288, 56294995342131200,
114841790497947648, 234187180623265792, 477381560501272576,
972777519512027136, 1981583836043018240, 4035225266123964416,
8214565720323784704, -1729382256910270464, -2882303761517117440,
-4611686018427387904, -6917529027641081856, -9223372036854775808,
-9223372036854775808, 64, 130,
264, 536, 1088,
2208, 4480, 9088,
18432, 37376, 75776,
153600, 311296, 630784,
1277952, 2588672, 5242880,
10616832, 21495808, 43515904,
88080384, 178257920, 360710144,
729808896, 1476395008, 2986344448,
6039797760, 12213813248, 24696061952,
49928994816, 100931731456, 204010946560,
412316860416, 833223655424, 1683627180032,
3401614098432])

在第二个系统上我得到:

array([                   0,                    2,                    8,
24, 64, 160,
384, 896, 2048,
4608, 10240, 22528,
49152, 106496, 229376,
491520, 1048576, 2228224,
4718592, 9961472, 20971520,
44040192, 92274688, 192937984,
402653184, 838860800, 1744830464,
3623878656, 7516192768, 15569256448,
32212254720, 66571993088, 137438953472,
283467841536, 584115552256, 1202590842880,
2473901162496, 5085241278464, 10445360463872,
21440476741632, 43980465111040, 90159953477632,
184717953466368, 378231999954944, 774056185954304,
1583296743997440, 3236962232172544, 6614661952700416,
13510798882111488, 27584547717644288, 56294995342131200,
114841790497947648, 234187180623265792, 477381560501272576,
972777519512027136, 1981583836043018240, 4035225266123964416,
8214565720323784704, -1729382256910270464, -2882303761517117440,
-4611686018427387904, -6917529027641081856, -9223372036854775808,
-9223372036854775808, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0])

因此,如您所见,在某些点上结果会变得不一致。有谁知道是什么原因造成的?

已添加

“不同的系统”是指不同的计算机。第一台计算机有 numpy 1.15.1,第二台计算机有 1.15.2。

最佳答案

旧版本的 NumPy 没有定义当您试图移动一个 >= 类型宽度的量时移位运算符会做什么。他们基本上只是将语义委托(delegate)给 C 移位运算符,for which this is undefined behavior .根据硬件和编译器的详细信息,几乎任何事情都可能发生(理论上包括崩溃、安全问题和任意其他不当行为)。

这得到了 changed在 1.18 中,但是你的 NumPy 版本比那个版本旧。

如果您想要明确的行为,请不要尝试那样做轮类。

关于python - 为什么 numpy 的按位左移在不同的系统上会给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65378482/

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