我在 JavasScipt 中有一个 BinaryStream 类,它从通过 XMLHHttpRequest 下载的数组中读取字节,并具有返回无符号字节(技术上是整数)的函数 next() 。我需要从流中读取一个 double 值,它与 Java 中的DataStream.readDouble()基本相同,它使用Double.longBitsToDouble(long)方法。我无法弄清楚 longBitsToDouble 方法是如何工作的。
这是我的代码:
var bits = stream.nextLong();
if (bits == 0x7ff0000000000000)
this.variables = [Infinity];
else if (bits == 0xfff0000000000000)
this.variables = [-Infinity];
else if (bits >= 0x7ff0000000000001 && bits <= 0x7fffffffffffffff || bits >= 0xfff0000000000001 && bits <= 0xfff0000000000001)
this.variables = [NaN];
else
{
var s = ((bits >> 63) == 0) ? 1 : -1;
var e = ((bits >> 52) & 0x7ff);
this.variables = [(e == 0) ? (bits & 0xfffffffffffff) << 1 : (bits & 0xfffffffffffff) | 0x10000000000000];
// This must be incorrect because it returns a number many times higher than it should
}
console.log(this.variables[0]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |