gpt4 book ai didi

从二进制转换为 float

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:12 24 4
gpt4 key购买 nike

我正在为计算机科学大学做一些练习,其中之一是关于将 64 位的 int 数组转换为 double 浮点值。

理解第一位符号 +/- 非常容易。指数也一样,我们知道偏差是 1023。

significand 有问题。我该如何计算?

最后,我想得到这些位所代表的实数。

最佳答案

计算给定 64 位的有效数字非常容易。

根据wiki article使用 IEEE 754,尾数由前 53 位(从位 0 到位 52)组成。现在,如果您想将 67 位的数字转换为 64 位值,则可以通过将值的尾随第 64 位设置为 1 来四舍五入,即使它之前是一个...因为其他 3 位:

11110000 11110010 11111最后一个字节四舍五入后变成11110000 11110011

因此不需要存储第 53 位,因为它的值始终为 1。这就是为什么您只在有效数字中存储 52 位而不是 53 位。

现在要计算它,您只需要将有效位 [bit(1) - bit(52)] -bit(0) 始终为 1- 的位范围作为目标并使用它。

int index_signf = 1; // starting at 1, not 0
int significand_length = 52;
int byteArray[53]; // array containing the bits of the significand

double significand_endValue = 0;
for( ; index_signf <= significand_length ; index_signf ++)
{
significand_endValue += byteArray[index_signf] * (pow(2,-(index_signf)));
}

significand_endValue += 1;

现在你只需要在计算之前相应地填充byteArray,使用这样的函数:

int* getSignificandBits(int* array64bits){

//returned array

int significandBitsArray[53];
// indexes++
int i_array64bits = 0;
int i_significandBitsArray=1;
//set the first bit = 1

significandBitsArray[0] = 1;



// fill it
for(i_significandBitsArray=1, i_array64bits = (63 - 1); i_array64bits >= (64 - 52); i_array64bits--, i_significandBitsArray ++)
significandBitsArray[i_significandBitsArray] = array64bits[i_array64bits];

return significandBitsArray;
}

关于从二进制转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10635656/

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