Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Autor: Fernando Mendonça de Almeida
- Descriçao: Função para transformar um número binário com ou sem ponto flutuante em um número decimal com ponto flutuante
- Utilização:
- binToFloat("1") // 1.0f
- binToFloat("10") // 2.0f
- binToFloat("10.1") // 2.5f
- binToFloat("111.01") // 7.25f
- binToFloat("9991119999.99999099991") // 7.25f (Números fora do escopo do binário com ponto flutuante são ignorados)
- binToFloat("9991119999.99999099991", 0) // 7.25f (Números fora do escopo do binário com ponto flutuante são ignorados)
- binToFloat("9991119999.99999099991", 1) // -1.0f (Números fora do escopo do binário com ponto flutuante são verificados e caso existam, é retornado -1)
- */
- float binToFloat(const char* str, const int tratarRuido){
- int tmpInt = 0;
- int tmpCount = 0;
- float tmp = 0.0f;
- int i;
- for(i=0; str[i] != '\0'; i++){
- switch(str[i]){
- case '1':
- if(tmpCount == 0){
- tmpInt = tmpInt << 1;
- tmpInt += 1;
- } else {
- tmpCount = tmpCount << 1;
- tmp += 1./(float)tmpCount;
- }
- break;
- case '0':
- if(tmpCount == 0){
- tmpInt = tmpInt << 1;
- } else {
- tmpCount = tmpCount << 1;
- }
- break;
- case '.':
- tmpCount = 1;
- break;
- default:
- if(tratarRuido){
- return -1.0f;
- }
- }
- }
- tmp = tmp + (float)tmpInt;
- return tmp;
- }
- float binToFloat(const char* str){
- return binToFloat(str, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment