Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Como utilizar números com ponto flutuante na CLDC 1.0

From Wiki
Jump to: navigation, search
Article Metadata

Compatibilidade
Plataforma(s):
MIDP 1.0

Artigo
Tradução:
Por thiagobrunoms
Última alteração feita por hamishwillee em 22 Oct 2013

Se você está trabalhando com dispositivos que utilizam apenas MIDP 1.0, você provavelmente também vai ter de lidar com CLDC 1.0, com o qual não é possível usar 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 do dispositivo não tem como trabalhar com ponto flutuante), 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 22 October 2013, at 05:25.
222 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×