gpt4 book ai didi

JAVA:从64位fpn转换为十进制

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

我在转换此 java 代码时遇到问题...该代码最初将 32 位 fpn 转换为十进制。我正在尝试将 64 位 fpn 转换为十进制。请帮忙

将32位FPN转换为十进制的原始代码

<小时/>
private void ConvertToDecimal(){
int pos = 1;
double doubleBin [] = new double [FPNRep.length()];
boolean bNegative = false;
double exp = 0.0;
double sig = 0.0;

for(int i = 0; i<=FPNRep.length() - 1; i++){
if (FPNRep.charAt(i) == '0'){
doubleBin[i] = 0;}
else{
doubleBin[i] = 1;}}

if (doubleBin[0] == 1){
bNegative = true;}
else{
bNegative = false;}
for (int i = 1; i <= 8; i++){
exp += (doubleBin[i] * Math.pow(2, 8 - i));}
exp = exp - 127;
for (int i = 9; i <= 31; i++){
if (doubleBin[i] == 1){
sig += (1 / Math.pow(2, pos));}
pos++;}
//Add the hidden bit.
sig = sig + 1;
if (bNegative == true){
number = -1 * sig * Math.pow(2, exp);}
else{
number = 1 * sig * Math.pow(2, exp);}
return;
}
<小时/>

我尝试将代码更改为 64 位 FPN 为十进制以及我的结果

<小时/>
private void ConvertToDecimal(){
int pos = 1;
double doubleBin [] = new double [FPNRep.length()];
boolean bNegative = false;
double exp = 0.0;
double sig = 0.0;

for(int i = 0; i<=FPNRep.length() - 1; i++){
if (FPNRep.charAt(i) == '0'){
doubleBin[i] = 0;}
else{
doubleBin[i] = 1;}}

if (doubleBin[0] == 1){
bNegative = true;}
else{
bNegative = false;}
for (int i = 1; i <= 11; i++){
exp += (doubleBin[i] * Math.pow(2, 11 - i));}
exp = exp - 127;
for (int i = 12; i <= 63; i++){
if (doubleBin[i] == 1){
sig += (1 / Math.pow(2, pos));}
pos++;}
//Add the hidden bit.
sig = sig + 1;
if (bNegative == true){
number = -1 * sig * Math.pow(2, exp);}
else{
number = 1 * sig * Math.pow(2, exp);}
return;
}
<小时/>

我使用了 12 的 64 位表示,这些是运行我尝试的 64 位十进制代码后的结果:

result should = 12

result = 6.339534373627983E270

如果您不确定我要做什么,请参阅this website

最佳答案

不知道为什么在 Java 已经拥有您想要的所有方法的情况下还要麻烦地手动完成这一切。

看起来您的输入是一个 String,表示二进制(32 位或 64 位)的基数 2 IEEE 754 float 。巧合的是,这正是 Java 的 floatdouble 的本质。因此:

public float binaryStringToFloat(final String input)
{
return Float.intBitsToFloat(Integer.parseInt(input, 2));
}

public double binaryStringToDouble(final String input)
{
return Double.longBitsToDouble(Long.parseLong(input, 2));
}

关于JAVA:从64位fpn转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816369/

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