我试图在任何其他语言中执行一些简单易懂的东西,但不是javascript:从浮动中获取位数(反之亦然).
在C/C++中它会是这样的
float a = 3.1415; int b = *((int*)&a);
反之亦然
int a = 1000; float b = *((float*)&a);
在C#中,您可以使用BitConverter ... floatBits或类似的东西......即使在VB6中为了基督的缘故,您也可以将float32存入int32.我怎么能在javascript中转换和int和浮点数?
当我在控制台中运行时,0.1 + 0.2结果是0.30000000000000004.所以我试着自己计算一下.以下是我采取的步骤.
1)表示0.1为IEEE754双:
0.1 = 0 01111111011 1001100110011001100110011001100110011001100110011010
Run Code Online (Sandbox Code Playgroud)
2)表示0.2为IEEE754双:
0.2 = 0 01111111100 1001100110011001100110011001100110011001100110011010
Run Code Online (Sandbox Code Playgroud)
这里的计算应该是正确的,因为我已经使用我的自定义函数检查了它们,该函数显示了JavaScript如何存储数字.
3)将两个数字转换为科学记数法:
0.1 = 1.1001100110011001100110011001100110011001100110011010x 2-4
0.2 = 1.1001100110011001100110011001100110011001100110011010x 2-3
现在由于指数数字不同,让我们调整0.2为-4:
0.2 = 0.11001100110011001100110011001100110011001100110011010x 2-4
4)添加它们:
1.1001100110011001100110011001100110011001100110011010
+ 0.1100110011001100110011001100110011001100110011001101
------------------------------------------------------
10.0110011001100110011001100110011001100110011001100111
Run Code Online (Sandbox Code Playgroud)
所以总和是:
10.0110011001100110011001100110011001100110011001100111x 2-4
5)将其标准化:
1.00110011001100110011001100110011001100110011001100111x 2-3
6)在小数点后将其四舍五入:
1.1100110011001100110011001100110011001100110011010000x 2-3
删除指数后,我最终得到以下结果数:
0.001110011001100110011001100110011001100110011001101
Run Code Online (Sandbox Code Playgroud)
当我使用此计算器将其转换为十进制时,它显示:
0.225000000000000088817841970012523233890533447265625
Run Code Online (Sandbox Code Playgroud)
不完全是预期的 …
我一直在尝试研究如何在JavaScript中使用类型数组,但是我还没有点击.我不明白如何正确地读/写"视图".
var a = 23453.342;
Run Code Online (Sandbox Code Playgroud)
现在让我们说我想将它存储在一个Float64Array类型的数组中
view[0] = ??? //how do I copy the bytes that represent variable a into here.
Run Code Online (Sandbox Code Playgroud)
另外,假设我想将内部JavaScript中的整数123456存储为64位浮点数:
var i = 123456;
Run Code Online (Sandbox Code Playgroud)
但我想把它存储好像它真的是一个4字节的整数.
var buff = new ArrayBuffer(4);
var view = new UInt32Array(buff);
view[0] = ???; //how do i determine and write the 4 bytes that would represent the value of i.
Run Code Online (Sandbox Code Playgroud)
然后在这两种情况下,一旦我能够写入数据,我如何在JavaScript中将其读回到局部变量中.