COMPUTAÇÃO CIENTÍFICA COM JAVA-XSC
Bruno José Torres Fernandes
Edmo Sérgio Ribeiro de Brito
Marcília Andrade Campos
Renato Viana Ferreira
bjtf, esrb, mac,rvf[at]cin.ufpe.br
Motivação
Por que intervalos? Incapacidade de representação dos números reais
nas máquinas Controle de erro numérico em computação científica
Por que Java? Portabilidade Independência de plataforma e dispositivo Linguagem mais popular
Exemplosdouble d = 3.9-3.8;if(d==0.1) System.out.println("equals");else System.out.println("not equals,“ + d);-> not equals, 0.10000000000000009
double d = 0.0;for(int i = 0; i < 10; i++){d += 0.4;}System.out.println(d);-> 3.9999999999999996
Ponto-flutuante em Java
Segue parcialmente o padrão IEEE 754 3 grandes falhas
Não dá suporte aos bits de exceçãoNão implementa os arredondamentos
direcionadosNão provê um tipo intervalar de dado de
máquina
Objetivos
Desenvolver uma extensão intervalar para Java - Java-XSC
Desenvolver uma calculadora intervalar utilizando a biblioteca Java-XSC
Resolver problemas numéricos com a solução proposta
Resultados (1/5)
Implementação dos arredondamentos direcionados
Definição do tipo Intervalo
Resultados (2/5)
Implementação da biblioteca Java-XSC, com as seguintes operações intervalares: IgualdadeComprimentoPertenceSimétricoRecíprocoAbsoluto
Resultados (3/5)
AdiçãoSubtraçãoMultiplicaçãoDivisão InterseçãoUniãoEstá contidoDistância
Resultados (4/5)
Interval a = new Interval(3.9, 3.9, 10);Interval b = new Interval(3.8, 3.8, 10);Interval c = IntervalMath.sub(a,b);if(c.pertains(0.1)){System.out.println("Pertence");
} else { System.out.println("Não pertence");}System.out.println(c);-> Pertence[0.1, 0.1000000002]
Resultados (5/5)
Interval d = new Interval(0, 0, 10);Interval e = new Interval(0.4, 0.4, 10);for(int i=0;i<10;i++){d = IntervalMath.add(d, e);
}System.out.println(d);
->[3.9999999991, 4.0000000013]
Java - XSC MapleInt
Arredondamento para baixo: 2.0 com precisão de 10-9
1.999999999 1.999999999Arredondamento para cima: 2.0 com precisão de 10-9
2.000000001 2.000000001Comprimento de [1.0, 2.5]
1.5 1.5Recíproco de [-5.0, -2.0] com precisão de 10-9
[-0.500000001, -0.199999999]
[-0.500000001, -0.199999999]0.0 pertence a [-0.1, 0.1]
true trueAdição: [1.0, 2.5] + [0.0, 8.9] com precisão de 10-9
[0.999999999, 11.400000001]
[0.999999999, 11.400000001]Subtração: [-8.9, 0.0] - [0.0, 8.9] com precisão de 10-9
[-0.000000001, 17.800000001]
[0.000000000, 17.800000001]Multiplicação: [1.0, 3.0] * [4.0, 5.0] com precisão de 10-9
[3.999999999, 15.000000001]
[3.999999999, 15.000000001]Divisão: [4.0, 5.0] / [1.0, 2.5] com precisão de 10-9
[1.599999999, 5.000000001] [1.599999999, 5.000000006]
Validação
Uso da extensão intervalar do Maple – intpakX (MapleInt)
Resultados esperados foram obtidos Precisão alcançada similar ou superior
aos da biblioteca de comparação
Trabalhos Futuros
Expansão da biblioteca para conter operações:LogarítmicasTrigonométricasEstatísticas
Uso da biblioteca em outros projetos Simulação de ambientes
Cooperação
DIMAp/ UFRN Karlsruhe Wuppertal
Conclusões
Versão atual da biblioteca validada com o MapleInt
Resultados bastante satisfatórios Grande possibilidade de expansão da
biblioteca
Referências
http://www.cin.ufpe.br/~javaxsc http://www.dimap.ufrn.br/~java-xsc http://www.math.uni-wuppertal.de/~xsc/
software/intpakX/ http://java.sun.com/
COMPUTAÇÃO CIENTÍFICA COM JAVA-XSC
Bruno José Torres Fernandes
Edmo Sérgio Ribeiro de Brito
Marcília Andrade Campos
Renato Viana Ferreira
bjtf, esrb, mac,rvf[at]cin.ufpe.br
Top Related