Namespaces
Variants
Actions

Como utilizar números com ponto flutuante na CLDC 1.0

Jump to: navigation, search
Dados do artigo

Artigo
Tradução:
Última alteração feita por hamishwillee em 08 Dec 2011

Se você está trabalhando com dispositivos que suportam apenas MIDP 1.0, você provavelmente também vai ter de lidar com CLDC 1.0, o qual não dá suporte a números com ponto flutuante. Assim, você não pode usar os primitivos float ou double em seu código.

Este post vai ajudar você nestes casos, através de uma biblioteca de código-aberto de David Clausen, chamada MicroFloat. A utilização desta biblioteca é muito lenta (pois o hardware não dá suporte a números com ponto flutuante neste dispositivo), mas com certeza vai funcionar.

MicroFloat é uma biblioteca de software Java para realizar operações matemáticas com ponto flutuante (IEEE-754), em dispositivos pequenos que não têm suporte nativo para os tipos com ponto flutuante. Basicamente, isto significa dispositivos móveis com suporte a Java (J2ME CLDC 1.0).

Neste pacote você terá suporte aos tipos primitivos "float" de 32-bit e "double" de 64-bit , incluindo todas as operações primitivas suportadas pelo Java SE (somar, subtrair, multiplicar, dividir, mod, comparações, casts de tipos), bem como uma reprodução integral de todos os métodos em java.lang.Math (sin, cos, exp, pow, log, etc). Na teoria, essas operações devem retornar resultados que são totalmente compatíveis com o padrão IEEE-754 e as especificações Java SE.

Você pode baixar a API aqui e procurar a documentação no formato JavaDoc neste link.

Então, você pode mudar seu código baseado no CLDC 1.1 como este:

// funções anteriores utilizando a aritimética de ponto flutuante nativo em CLDC 1.1
public double averageThreeNumbers(double a, double b, double c) {
return (a + b + c) / 3;
}
 
// nova função utilizando a ferramenta de aritmética MicroFloat na CLDC 1.0
import net.dclausen.microfloat.*;
 
private static final long THREE = 0x4008000000000000L;
public long averageThreeNumbers(long a, long b, long c) {
return MicroDouble.div(MicroDouble.add(MicroDouble.add(a, b), c), THREE);
}

Você pode obter as constantes como as três acima, através de uma simples classe J2SE auxiliar com um método main como este:

// no Console desktop numa aplicação Java SE para obter uma constante no MicroFloat
public static void main(String[] args) {
System.out.println(Long.toHexString(Double.doubleToLongBits(3)));
}
This page was last modified on 8 December 2011, at 07:51.
119 page views in the last 30 days.
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved