gpt4 book ai didi

Java:将 int 读取为 float,反之亦然,无需隐式转换

转载 作者:行者123 更新时间:2023-12-02 20:49:24 26 4
gpt4 key购买 nike

我偶然发现了这个Wikipedia article关于快速反平方根计算,示例代码中有几行让我感兴趣。

y  = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;

这是用 C 语言编写的,在这种情况下是有意义的,但是有没有办法在没有真正指针的情况下在 Java 中实现相同的效果?

最佳答案

例如,您可以使用 ByteBuffer(如果必须的话,可以使用 Unsafe)

ByteBuffer bb = ByteBuffer.allocate(4);
// y = number
// i = * ( long * ) &y; // assuming long is 32-bit, not long long
bb.putFloat(0, number);
int i = bb.getInt(0);
// i = 0x5f3759df - ( i >> 1 );
i = 0x5f3759df - ( i >> 1 );
// y = * ( float * ) &i;
bb.putInt(0, i);
float y = bb.getFloat(0);

您可以不使用 ByteBuffer 或内存技巧

// y  = number;
float y = number;
// i = * ( long * ) &y;
int i = Float.floatToRawIntBits(f);
// i = 0x5f3759df - ( i >> 1 );
i = 0x5f3759df - ( i >> 1 );
// y = * ( float * ) &i;
y = Float.intBitsToFloat(i);

关于Java:将 int 读取为 float,反之亦然,无需隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36724533/

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