float mappedVal = (float)((val * MAX_FLOAT_VALUE + 1) / MAX_DOUBLE_VALUE);
我可以通过某种按位运算将结果逼近上面提到的“mappedVal”,以加速相同的计算吗?
答案 0 :(得分:0)
我不确定你想要实现什么,因为一些双重值远远超出浮动范围。
但是如果你愿意冒险失去对浮动来说太大的价值,那就试试这个:
float f = new Double(val).floatValue();
编辑:这与cast to float完全相同。 :)
答案 1 :(得分:0)
这将双精度值映射到具有相同最高32位的浮点数:
float mappedVal = Float.intBitsToFloat((int)(Double.doubleToLongBits(val)>>32));
这个操作的算术解释有点复杂,指数的一部分被映射到尾数......