Galera, antes de mostrar a minha duvida vou explicar o que estou fazendo.
É um trabalho da faculdade, estou fazendo um pipeline aritmético… o erro está acontecendo na parte da conversão de um número decimal ponto flutuante para um binário ponto flutuante, mas não na conversão(já até simulei ela várias vezes) mas sim no array, acredito eu(pela própria indicação do erro) e também na chamada, que acho que não estou conseguindo fazer direito…
Enfim, aí vai o trecho do código, ele se encontra na classe Binario
public int[] converte(double numero){
// Transformando o numero decimal ponto flutuente em binário
// ponto flutuante
// Nesta primeira parte, fazemos a divisão do número decimal
// até que ele seja maior 0.5 e menor que 1
double number = 0;
int exp;
for(exp = 0 ; (numero > 1) || (numero <= 0.5) ; exp++){
number = numero/2;
numero = numero/2;
}
// Já nesta outra parte, transformamos realmente o número em binário
double aux = 0;
int numero_binario[] = new int[24];
if(number >= 0) numero_binario[0] = 0;
else numero_binario[0] = 1;
for(int i = 1; number != 1 ; i++){
numero_binario[i] = (int)number*2;
if(number*2 == 1.0) break;
if( (int)number*2 == 1){
aux = (number*2) - ((int)number*2);
number = aux;
}
else number = number*2;
}
// Transformando o expoente em binário para armazenar na mantissa
int expoente_binario[] = new int[8];
if(exp == 1) expoente_binario[7] = 1;
else{
for(int a = 0 ; exp >= 2 ; a++){
expoente_binario[a] = exp % 2;
exp = (int)exp/2;
if(exp < 2){
a++;
expoente_binario[a] = 1;
}
}
}
// Concatenando agora os dois arrays em um outro array, que será a mantissa
int binario[] = new int[32];
int k = 0;
for(k = 0 ; numero_binario[k] != '\0' ; k++)
binario[k] = numero_binario[k];
while(k < 24){
binario[k] = 0;
k++;
}
for(int j = 0 ; expoente_binario[j] != '\0' ; j++, k++)
binario[k] = expoente_binario[j];
return binario;
}
/********************************/
Trecho da classe main que chama o método:
Binario bin = new Binario();
double teste = 4.5;
int esse[] = new int[32];
esse = bin.converte(teste);
for(int i = 0 ; i < esse.length ; i++)
System.out.print(esse[i]);
// Fiz essa parte assim só para testar o método mesmo, que por sinal ta apontando dois erros, aí vão eles:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 24
at pipelinearitmetico.Binario.converte(Binario.java:131)
at pipelinearitmetico.Main.main(Main.java:64)
Java Result: 1
OBS: sei que requer um pouco de paciência para simular cada etapa do código, mas espero que possam me ajudar!
Acredito não haver nenhum erro nos algoritmos de conversão, como mencionei anteriormente, já os simulei várias vezes.
Agradeço desde já