170 likes | 259 Views
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
E N D
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
Exemplos double 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ção • Não implementa os arredondamentos direcionados • Nã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: • Igualdade • Comprimento • Pertence • Simétrico • Recíproco • Absoluto
Resultados (3/5) • Adição • Subtração • Multiplicação • Divisão • Interseção • União • Está contido • Distâ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.999999999 Arredondamento para cima: 2.0 com precisão de 10-9 2.000000001 2.000000001 Comprimento de [1.0, 2.5] 1.5 1.5 Recí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 true Adiçã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ítmicas • Trigonométricas • Estatí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