MathC – uma classe com funções matemáticas para JavaME

Eita! Que título enorme!

Mas, deixando o título de lado, vamos ao que interessa. Se você é daqueles que programa em JavaME e alguma vez na vida precisou de fazer cálculos com logaritmos ou exponenciais usando JavaME e decepcionou-se com a classe Math do JavaME, por esta não possuir essas funções, seus problemas acabaram-se 🙂 . Disponibilizo aqui uma classe criada por mim que possui os seguintes métodos:

  • decimal() – formatação de número de ponto flutuante;
  • exp() – exponencial;
  • log() – logaritmo natural;
  • pow() – potenciação;
  • round() – arredondamento.

Vale lembrar que esta classe serve somente para dispositivos que possuam suporte a CLDC 1.1. O arquivo se encontra na caixo do box.net ao lado dentro de apps, com o nome de MathC.zip. Dentro deste arquivo temos a documentação da classe e o pacote MathC.jar. E, como de costume 🙂 , caso a caixa do box.net não apareça, clique aqui.

P.S.: Sei que já existe uma classe (a MathFP) com alguns destes métodos implementados e outros mais, mas seu uso não é tão intuitivo quanto o da minha classe 🙂 . Exemplo de cálculo de logaritmo:

MathFP:

int n = MathFP.toFP("14.8965");
int n_log = MathFP.log(n);
System.out.println(MathFP.toString(n_log));

Resultado: 2.7021

MathC:

double n = MathC.log(14.8965);
System.out.println(n);

Resultado: 2.701126286029386

Anúncios

Sobre Fábio Medeiros

Meu nome é Fábio Medeiros. Cearense de nascença e com muito orgulho (daí o nome do blog, uma referência à minha terra). Sou formado em Tecnologia em Telemática, pelo CEFET-CE. Escrevi alguns artigos sobre programação JavaME e dispositivos portáteis (PDA) para a revista WebMobile.
Esse post foi publicado em JavaME e marcado , , , . Guardar link permanente.

6 respostas para MathC – uma classe com funções matemáticas para JavaME

  1. Pingback: Nova versão da classe MathC « siriarah

  2. Carlos disse:

    Parabéns,
    estou usando sua Classe MathC. O método pow(double x, double y) realmente estava fazendo falta, pois não era possível usar as classes Math ou MathFP para resolver diretamente (2.2 ^ -2.2).
    A propósito, testei o método MathC.decimal, mas parece que tem um pequeno problema, veja os resultados:

    double x = -0.01;
    double y = 10.1;
    x / y = -9.900990099009901E-4 (correto)

    decimal( x/y , 7) = -9.90099 (incorreto)

    obs: Não sei se já tem uma revisão da Classe, não lembro de onde fiz o download.

    farei mais alguns testes com o método pow e caso encontre algo, volto a lhe informar.

    até mais,

    Carlos

  3. siriarah disse:

    Olá Carlos,

    É bom saber que a classe é útil para mais alguém além de mim 🙂

    Testei os cálculos que tu me passaste acima e não consegui perceber qual seria o erro, pois o método decimal somente vai retornar o número formatado com a quantidade de dígitos passados (neste caso 7) após o separador, e se você observar os dois últimos dígitos que iriam aparecer seriam 0 (zero), por isso sua supressão.

    Todavia se a dúvida permanecer pode escrever novamente.

  4. Carlos disse:

    Olá, eu de novo

    double x = -0.01;
    double y = 10.1;
    x / y = -9.900990099009901E-4 (correto)
    que é o mesmo que:
    x / y = -9.900990099009901 x (10 ^ -4)
    x / y = -9.900990099009901 x 0.0001
    x / y = -0.0009900990099

    decimal( x/y , 7) = -9.90099 (incorreto)

    deveria ser:

    decimal (x/y , 7) = -0.00099

    importante: Não tenho intenção de desistimular o uso de sua classe e muito menos de ficar apontando algum erro, portanto, caso você consiga confirmar ou negar a existência dessa falha, faça nos um favor e edite as minhas menssagens, deixando somente a parte referente aos agradecimentos que lhe faço.

    Carlos

  5. siriarah disse:

    Olá Carlos,

    Desculpe-me pelo erro, agora que notei que o valor real era diferente por causa do E-4 :).
    Andei analisando a sua questão e descobri que este tipo de cálculo, quando se usa JavaSE, pode ser resolvido com a classe BigDecimal, que não é implementada em JavaME 😦 (pelo menos não em CLDC/MIDP).
    Estou vendo a possibilidade de portar esta classe para o MathC mas ainda não está certo.
    E não precisa se preocupar, você não está desestimulando nada, muito pelo contrário, este foi um erro que passou desapercebido por mim quando implementei a classe e que só veio se manifestar quando você a utilizou, e, se eu conseguir consertar :), poderá ser utilizado e beneficiar mais pessoas.
    Assim que tiver novidade postarei no blog.

  6. Pingback: Nova versão da classe MathC (2) « siriarah

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s