如何在Flash中将double值映射到float值?

时间:2013-03-15 08:59:04

标签: java algorithm floating-point bit-manipulation double-precision

乍一看,我的问题看起来有点奇怪;但是将double加倍到浮点值并不是我想要的。因为当你施放它时,你只是失去了一些相对于IEEE-754定义的规则的精度,并且无法实现double值到float范围的实际映射;它没用。下面的表达式有效,但是当你有大量的输入时它非常昂贵:

float mappedVal = (float)((val * MAX_FLOAT_VALUE + 1) / MAX_DOUBLE_VALUE);

我可以通过某种按位运算将结果逼近上面提到的“mappedVal”,以加速相同的计算吗?

2 个答案:

答案 0 :(得分:0)

我不确定你想要实现什么,因为一些双重值远远超出浮动范围。

但是如果你愿意冒险失去对浮动来说太大的价值,那就试试这个:

float f = new Double(val).floatValue();

编辑:这与cast to float完全相同。 :)

答案 1 :(得分:0)

这将双精度值映射到具有相同最高32位的浮点数:

float mappedVal = Float.intBitsToFloat((int)(Double.doubleToLongBits(val)>>32));

这个操作的算术解释有点复杂,指数的一部分被映射到尾数......