gpt4 book ai didi

java - 最快的两个数字符号比较,包括零

转载 作者:行者123 更新时间:2023-11-30 07:56:31 25 4
gpt4 key购买 nike

考虑到符号可以是正数、负数或零,找出两个数字是否具有相同符号的最快方法是什么。

通常,您可以这样说两个数字具有相同的符号:

Math.signum(int1) == Math.signum(int2);

您可以使用以下方法对其进行优化:

int1 ^ int2 >= 0;

但是,这是假设零为正。有哪些方法会返回 true,包括零。

一些错误的例子是:

a = 0; b = 1;
boolean test = a ^ b >= 0

其中测试将产生 true 而不是 false。

我运行了一些测试平台,发现按位函数返回值的速度快了近 4 个数量级。由于这是一个我将在非常大的树中为每个节点使用的函数,因此我需要尽可能地优化它。

我会发布一个尝试过的解决方案,但找不到比原始解决方案更好的解决方案。

编辑:我意识到这里也有类似的问题:Fastest way to check if two integers are on the same side of 0我问是否有办法找到符号是否相同,包括零。所以比较 1 和 1 是真的,-1 和 -1 是真的,0 和 0 是真的,0 和 1 是假的,0 和 -1 是假的,等等。这和上面问的问题不是一回事!

最佳答案

这是我想出的:

private static boolean signcmp(int x, int y) {
return ((( x >> 31) | (-x >>> 31)) ^ (( y >> 31) | (-y >>> 31))) == 0;
}

关于java - 最快的两个数字符号比较,包括零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100517/

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