UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE U NIVERSIDADE F EDERAL DO R IO G RANDE DO N ORTE D EPARTAMENTO DE I NFORMÁTICA E M ATEMÁTICA A PLICADA P ROGRAMA DE P ÓS -G RADUAÇÃO EM S ISTEMAS E C OMPUTAÇÃO JAVA-XSC: Módulo Complexo Intervalar Marciano Lourenço da Silva Gonçalves Orientador: Prof. Dr. Regivan Hugo Nunes Santiago Dissertação de Mestrado apresentada ao Programa de Pós-Graduação em Sistemas e Computação da UFRN (área de concentração: Teoria da Computação) como parte dos requisitos para obtenção do título de Mestre em Sistemas e Computação. Natal, RN, fevereiro de 2012 Divisão de Serviços Técnicos Catalogação da publicação na fonte. UFRN / Biblioteca Central Zila Mamede Pereira, Fulano dos Anzóis. Sobre a Preparação de Propostas de Tema, Dissertações e Teses no Programa de Pós-Graduação em Engenharia Elétrica da UFRN / Fulano dos Anzóis Pereira - Natal, RN, 2006 23 p. Orientador: Sicrano Matosinho de Melo Co-orientador: Beltrano Catandura do Amaral Tese (doutorado) - Universidade Federal do Rio Grande do Norte. Centro de Tecnologia. Programa de Pós-Graduação em Engenharia Elétrica. 1. Redação técnica - Tese. 2. LATEX- Tese. I. Melo, Sicrano Matosinho de. II. Amaral, Beltrano Catandura do. III. Título. RN/UF/BCZM CDU 004.932(043.2) Java-XSC: Módulos Complexo e Complexo Intervalar Marciano Lourenço da Silva Gonçalves Dissertação de Mestrado aprovada em 15 de fevereiro de 2012 pela banca examinadora composta pelos seguintes membros: Prof. Dr. Regivan Hugo Nunes Santiago (orientador) . . . . . . . . . DIMAp/UFRN Prof. Dr. Benjamin Rene Callejas Bedregal . . . . . . . . . . . . . . . . . . DIMAp/UFFN Prof. Dr. Gibeon Soares de Aquinho Júnior . . . . . . . . . . . . . . . . . . DIMAp/UFRN Este trabalho é dedicado aos meus pais pela confiança que depositaram em mim e por seu imenso carinho. Agradecimentos Ao meu orientador, professor Regivan Hugo Nunes Santiago, sou grato por suas observações, empenho e dedicação com que me orientou, tornando possível a realização desta dissertação. Aos colegas Regina Parente Rosa, pelo apoio nos momentos difíceis. Emannuely Monteiro e Fabrício Costa pelas intermináveis horas estudando lógica. Aos demais colegas de pós-graduação, pelas críticas e sugestões. Aos amigos Reginaldo Aquino, Joafran Paiva e Leonardo Mozer, pelos momentos de descontração que me mantiveram são diante de tanto estudo. À minha família pelo apoio durante esta jornada. À CAPES, pelo apoio financeiro. Resumo Este trabalho tem por finalidade desenvolver módulos que venham aumentar o poder computacional da biblioteca JAVA-XSC, sendo XSC1 um acrônimo para “Language Extensions for Scientific Computation”. Essa biblioteca é na verdade uma extensão da linguagem de programação JAVA que possui rotinas elementares e funções padrão úteis da matemática intervalar. Neste trabalho foram acrescentados dois módulos à biblioteca; a saber: o módulo dos números complexos e o módulo dos números complexos intervalares que em conjunto com os módulos originais visam possibilitar que aplicações numéricas, como por exemplo na área da engenharia, possam ser usadas em dispositivos que executam programas JAVA. Palavras-chave: JAVA, JAVA-XSC, Matemática Intervalar, Números Complexos, Números Complexos Intervalares. 1 http://www.xsc.de/ Abstract This work aims to develop modules that will increase the computational power of the Java-XSC library, and XSC an acronym for "Language Extensions for Scientific Computation”. This library is actually an extension of the Java programming language that has standard functions and routines elementary mathematics useful interval. in this study two modules were added to the library, namely, the modulus of complex numbers and complex numbers of module interval which together with the modules original numerical applications that are designed to allow, for example in the engineering field, can be used in devices running Java programs. Keywords: JAVA, JAVA-XSC, Interval Mathematics, Complex Numbers, Complex Numbers Interval. Sumário Sumário i Lista de Figuras iv Lista de Tabelas v 1 Introdução 1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 4 4 2 Números complexos 2.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Os Números Complexos . . . . . . . . . . . . . . . . . . . . 2.2.1 Representação Algébrica . . . . . . . . . . . . . . . . 2.2.2 Representação Polar . . . . . . . . . . . . . . . . . . 2.2.3 Funções Complexas Elementares . . . . . . . . . . . 2.3 Números complexos intervalares . . . . . . . . . . . . . . . . 2.3.1 Aritmética Intervalar Real . . . . . . . . . . . . . . . 2.3.2 Aritmética Complexa Intervalar Retangular . . . . . . 2.3.3 Aritmética Complexa Intervalar Circular . . . . . . . 2.3.4 Aritmética Complexa Intervalar Usando a Forma Polar 2.3.5 Funções Complexas Intervalares Elementares . . . . . 2.4 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Algumas ferramentas para cálculo numérico 3.1 Introdução . . . . . . . . . . . . . . . . . 3.2 CLN (Class Library for Numbers) . . . . 3.2.1 Tipos Numéricos . . . . . . . . . 3.2.2 Números Exatos . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 8 9 11 14 16 16 18 19 20 22 24 . . . . 26 26 26 27 27 3.2.3 Números de Ponto-Flutuante . . . . . . . . 3.2.4 Números Complexos . . . . . . . . . . . . 3.2.5 Funções de Arredondamento . . . . . . . . 3.3 GNU MP (GMP) . . . . . . . . . . . . . . . . . . 3.3.1 Números Racionais . . . . . . . . . . . . . 3.3.2 Ponto-Flutuante . . . . . . . . . . . . . . . 3.4 MPFR (Multiple Precision Floating-Point Reliable) 3.4.1 Modos de Arredondamento . . . . . . . . . 3.4.2 Ponto-Flutuante . . . . . . . . . . . . . . . 3.5 MPFI (Multiple Precision Floating-Point Interval) 3.5.1 Modos de Arredondamento . . . . . . . . . 3.6 MPC (Multiple Precision Complex) . . . . . . . . 3.6.1 Modos de Arredondamento . . . . . . . . . 3.6.2 Funções Complexas . . . . . . . . . . . . 3.7 INTLIB . . . . . . . . . . . . . . . . . . . . . . . 3.7.1 Simulação de Arredondamento Direcionado 3.8 COMMONS MATH . . . . . . . . . . . . . . . . 3.8.1 Organização . . . . . . . . . . . . . . . . 3.8.2 Números Complexos . . . . . . . . . . . . 3.9 Linguagens XSC . . . . . . . . . . . . . . . . . . 3.9.1 PASCAL-XSC . . . . . . . . . . . . . . . 3.9.2 C-XSC . . . . . . . . . . . . . . . . . . . 3.10 JAVA-XSC . . . . . . . . . . . . . . . . . . . . . 3.10.1 A Linguagem de Programação JAVA . . . . 3.10.2 Desenvolvimento da Biblioteca . . . . . . 3.10.3 Pacote IAMath . . . . . . . . . . . . . . . 3.10.4 Modo de Arredondamento . . . . . . . . . 3.11 Resumo Comparativo . . . . . . . . . . . . . . . . 3.12 Considerações . . . . . . . . . . . . . . . . . . . . 4 Módulos Complexo e Complexo Intervalar 4.1 Objetivos . . . . . . . . . . . . . . . . 4.2 Os Módulos . . . . . . . . . . . . . . . 4.2.1 Módulo Complexo . . . . . . . 4.2.2 Módulo Complexo Intervalar . . 4.3 Comparação entre C-XSC e JAVA-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 29 30 30 31 32 33 33 34 35 36 36 36 37 37 40 40 41 42 47 48 52 58 58 59 60 61 62 64 . . . . . 65 65 66 66 69 72 4.4 5 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conclusão 74 75 Referências bibliográficas 77 A Modos de Arredondamento A.1 Tipos de Arredondamento . . . . . . . . . . . . . . A.2 Arredondamento com o Incremento Pré-Determinado A.3 Arredondamento para Inteiro . . . . . . . . . . . . . A.4 Regras de Desempate . . . . . . . . . . . . . . . . . A.5 Arredondamento Escalado . . . . . . . . . . . . . . A.6 Arredondamento em Ponto-Flutuante . . . . . . . . . 81 81 82 82 83 85 86 B Código Fonte da biblioteca JAVA-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 C Código Fonte da Classe Complex 111 D Código Fonte da Classe Cinterval 125 E Complexos Intervalares Utilizados no Teste T 193 Lista de Figuras 2.1 2.2 Interpretação geométrica dos números complexos . . . . . . . . . . . . . Forma algébrica e polar do complexo c = 5 + i3 . . . . . . . . . . . . . . 12 13 3.1 3.2 3.3 3.4 Hierarquia dos tipos numéricos em CLN . . Tamanho de uma variável do tipo dotprecision Formato de um ponto-flutuante . . . . . . . . Complexo Intervalar [3.0,4.5] + i[1.0,2.0] . . . . . . 28 51 54 56 4.1 Interface gráfica da ferramenta GraphPad . . . . . . . . . . . . . . . . . 73 iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lista de Tabelas 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Módulos do INTLIB: Aritmética elementar para intervalos Módulos do INTLIB: Funções padrões para intervalos . . . Módulos do INTLIB: Funções úteis . . . . . . . . . . . . Métodos da classe Complex . . . . . . . . . . . . . . . . . Métodos da classe ComplexFormat . . . . . . . . . . . . . Modos de Arredondamento . . . . . . . . . . . . . . . . Resumo comparativo entre as ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 38 39 42 46 63 63 4.1 4.2 Métodos da classe Complex . . . . . . . . . . . . . . . . . . . . . . . . Métodos da classe Cinterval . . . . . . . . . . . . . . . . . . . . . . . . 67 70 E.1 Complexos Intervalares Utilizados no Teste T . . . . . . . . . . . . . . . 193 v Capítulo 1 Introdução No surgimento dos primeiros computadores, e por alguns anos mais, o principal objetivo dos pesquisadores era obter ganhos de tempo com ferramentas que automatizassem os cálculos matemáticos e que tais cálculos retornassem uma resposta o mais rápido possível. Na medida em que surgem novas tecnologias e as antigas vão sendo aperfeiçoadas, chegou-se um ponto em que a velocidade do processamento das informações deixou de ser uma preocupação. A preocupação agora é representar essas informações de forma cada vez mais precisa. Além disso, segundo [Santiago et al. 2006], um dos principais problemas encontrados na computação numérica eram os erros de arredondamento. Observe este exemplo de Rump [Muller et al. 2009] que calcula y = 333.75b6 + a2 (11a2 b2 − b6 − 121b4 − 2) + 5.5b8 + a/(2b) Para a = 77617.0 e b = 33096.0. Esta função foi computada por Rump em um IBM S/370 e ele usou três tipos de precisão: simples (com resultado y = 1.172603...), dupla (y = 1.1726039400531...) e estendida (y = 1.172603940053178...). Apesar de aparentemente o resultado estar correto, ele está errado. O resultado correto encontra-se no intervalo −0.82739605994682135 ± 5 × 10−17 , pode-se observar que inclusive o sinal está errado. Este exemplo foi revisado e computado em outras máquinas, mas o resultado permanecia errado. Uma das propostas desenvolvidas para controlar os erros computacionais foi a matemática intervalar. Em 1966, Moore propôs uma aritmética intervalar que possibilitou um grande avanço nas pesquisas sobre o controle de erros computacionais. Esta aritmética tem por objetivos solucionar problemas que se concentram fundamentalmente em dois CAPÍTULO 1. INTRODUÇÃO 2 aspectos: na criação de um modelo computacional que reflita sobre o controle e análise dos erros que ocorrem no processo computacional, e na escolha de técnicas de programação adequadas para desenvolvimento de softwares científicos buscando minimizar os erros nos resultados [Moore 1966]. A necessidade de ferramentas que dessem suporte a essa aritmética fez com que surgissem algumas bibliotecas e também as linguagens com extensões científicas, conhecidas como XSC (Language Extensions Scientific Computation). Essas ferramentas favorecem o controle automático de erros através de métodos que se encarregam de verificar e garantir a exatidão dos cálculos efetuados [Garrozi & Albuquerque 2009]. Algumas bibliotecas como a MPFI e INTLIB (Capítulo 3), apresentam módulos específicos para o uso da aritmética intervalar. Nestes módulos foram desenvolvidos tanto operações elementares; como: adição, subtração, divisão e multiplicação, quanto funções mais elaboradas, tais como funções trigonométricas. As linguagens XSC permitem que desenvolvedores de softwares numéricos possam criar seus aplicativos através de uma linguagem bastante rica que tem como características fundamentais: controle de arredondamento, tipos de dados com exatidão após a vírgula, bibliotecas com as principais rotinas matemáticas, arrays dinâmicos, a utilização dos tipos complexo e intervalo, entre diversas outras [Dutra 2000]. Ao longo do tempo várias linguagens XSC foram sendo desenvolvidas a partir de algumas linguagens de programação, é o caso da PASCAL-XSC e C-XSC, que serão apresentadas no Capítulo 3. JAVA-XSC foi desenvolvida no Departamento de Informática e Matemática Aplicada da Universidade Federal do Rio Grande do Norte e dá suporte a intervalos de extremos reais à linguagem JAVA. Ela é composta por seis módulos: operações básicas, funções entre conjuntos, funções geométricas, funções elementares, funções trigonométricas e funções de conversão entre tipos e definição de constantes. Apesar de estar em um nível avançado, JAVA-XSC ainda não está completa. Uma das necessidades atuais da linguagem é um módulo que possa trabalhar tanto com números complexos quanto com uma aritmética intervalar complexa. Os números complexos são na verdade uma extensão dos números reais. Eles sugiram da necessidade de se obter soluções em raízes quadradas negativas, pois os matemáticos representavam os números reais como pontos em uma reta, onde cada ponto corresponde CAPÍTULO 1. INTRODUÇÃO 3 um único número real. Com isso surgiu um grande problema, já que raízes quadradas de números negativos não podem ser representados nesta reta. O matemático alemão Karl Friedrich Gauss propôs uma associação entre números imaginários e pontos sobre uma reta perpendicular à reta real, passando pelo ponto zero, e assim surgiu um sistema de coordenadas cartesianas, onde os números reais são postos sobre o eixo horizontal (eixo real) e os números imaginários sobre a reta perpendicular √ √ √ (eixo imaginário). Sendo assim, podemos representar −a como sendo −1 a onde √ a parte imaginária seria exatamente −1 e são colocados no eixo imaginário como seus múltiplos. Desta forma surgiram os números complexos, onde não só os imaginários são representados, mas as possíveis combinações entre reais e imaginários [Menochi 2004]. Com a ajuda da matemática intervalar, é possível representar os números complexos de uma forma mais precisa. Isto associado à uma ferramenta numérica, poderá facilitar a criação de novos aplicativos científicos. E esta é a proposta deste trabalho, o desenvolvimento de um módulo complexo intervalar para a biblioteca JAVA-XSC. 1.1 Motivação Neste trabalho foi tido como motivação a escassez de ferramentas de cálculo numérico desenvolvido para a linguagem de programação JAVA, principalmente em se tratando de uma ferramenta que dê suporte a complexos intervalares. Existem algumas ferramentas como MPFI (Multiple Precision Floating-Point Interval) e MPC (Multiple Precision Complex), que trabalham respectivamente com intervalos e números complexos, mas ambas foram desenvolvidas para serem usadas com o compilador C ou C++ e a ferramenta Commons Math que é específica para JAVA, mas não apresenta funções que trabalhem com complexos em sua forma polar. A linguagem C-XSC possui módulos específicos para trabalhar com complexos intervalares, como os tipos complexo (complex), intervalo (interval) e complexo intervalar (cinterval), mas como o próprio nome sugere, ela também foi desenvolvida para ser usada com C e C++. JAVA-XSC é uma biblioteca desenvolvida especificamente para a linguagem Java que provê a utilização de cálculos numéricos com controle dos erros. Segundo [Dutra 2000], para JAVA-XSC, existe a necessidade de serem elaborados módulos que venham a traba- CAPÍTULO 1. INTRODUÇÃO 4 lhar com matrizes, vetores intervalares e aritmética intervalar complexa. Por estas deficiências, tem-se por motivação a criação de dois módulos em JAVA-XSC que venham a trabalhar com números complexos e números complexos intervalares, que no caso corresponderiam aos tipos complex e cinterval da C-XSC. Estes módulos serão compostos por rotinas de aritmética elementares, além de funções padrões e outras funções úteis. 1.2 Objetivo Este trabalho tem como pretensão, através do desenvolvimento destes módulos, dar continuidade ao trabalho que já vem sendo desenvolvido pelo Departamento de Informática e Matemática Aplicada da Universidade Federal do Rio Grande do Norte desde 2000, à JAVA-XSC. Esta ferramenta é uma extensão de suporte à computação de alta exatidão para a linguagem de programação JAVA [da Silva 2007]. Nesta nova versão da ferramenta é dado um módulo específico que provê meios para trabalhar com números complexos intervalares. Sendo assim, o objetivo principal deste trabalho está na construção de módulos para JAVA-XSC que irá aumentar, o já enorme, espectro de aplicação da linguagem JAVA, possibilitando que instrumentos como tablets e smartphones possam conter aplicações de engenharia baseados na aritmética retangular complexa. 1.3 Organização A presente dissertação se desenvolve em 5 Capítulos, organizados conforme descrito a seguir. No Capítulo 2 é apresentada uma breve introdução aos números complexos e números complexos intervalares, com seus históricos, conceitos, operações e funções básicas. No Capítulo 3 são apresentadas algumas ferramentas que dão suporte ao cálculo numérico. Neste capítulo serão descritas as características, funções e operações de algumas linguagens XSC, como PASCAL-XSC e C-XSC, que são linguagens apropriadas para CAPÍTULO 1. INTRODUÇÃO 5 computação científica, além da biblioteca JAVA-XSC. No Capítulo 4 mostram-se o desenvolvimento dos módulos complexo e complexo intervalar para a ferramenta JAVA-XSC. No Capítulo 5 são apresentados as considerações finais. Além disso o trabalho apresenta anexos contendo todos os códigos fontes utilizados no desenvolvimento dos módulos, além de um anexo específico sobre modos de arredondamento. Capítulo 2 Números complexos 2.1 Introdução De acordo com [Cerri & Monteir 2001], na primeira metade do século XVII os matemáticos franceses Pierre de Fermat e René Descartes construíram a Geometria Analítica. Com o domínio dessa nova linguagem da geometria, Descartes estudou, entre outras coisas, as equações algébricas. Descartes mencionou em seu texto Discurso do Método a seguinte afirmação: “Nem sempre as raízes verdadeiras ou falsas de uma equação são √ reais. Às vezes elas são imaginárias”. Com isto, até hoje o número −1 é chamado de número imaginário. Alguns personagens contribuíram no desenvolvimento da teoria dos números complexos, mas quem fez o trabalho mais importante e decisivo sobre o assunto foi Leonhar Euler. Muitas das notações que conhecemos hoje foram introduzidas por ele, inclusive a √ substituição de −1 por i. Euler passou a estudar números da forma z = a + bi onde a e b são números reais e = -1. Esses números são chamados de números complexos. Segundo [Ezequias 1998], diversas aplicações foram surgindo através do conceito de tais números. i2 A partir dos números complexos os matemáticos tiveram a possibilidade de criar novas álgebras. Gauss, em 1801, estendeu os inteiros (números da forma a + bi em que a e b são inteiros e i2 = -1) na sua álgebra das congruências (aritmética modular). Em 1843, Hamilton introduziu uma multiplicação de vetores no espaço de quatro dimensões, construindo a álgebra, não comutativa, dos Quatérnions. O grupo dos quatérnions foi importante no desenvolvimento da álgebra abstrata e na construção da Física moderna [Boyer 1974], [Baumgart 1969] e [Felzenszwalb 1979]. CAPÍTULO 2. NÚMEROS COMPLEXOS 7 Na aerodinâmica, os complexos também tiveram sua utilidade. Em 1906, Joukowski utilizando transformações geométricas, construiu uma curva fechada no plano complexo que representa o perfil de uma asa de avião (aerofólio de Joukowski) e, usando o princípio de Bernoulli e a teoria das funções complexas, deduziu a fórmula F = x + yi = −ieiα (VkLp), que permite calcular a força de levantamento responsável pela sustentação do voo de um avião. Na eletrônica e na eletricidade, a análise de circuitos de corrente alternada é feita com a ajuda de números complexos. Grandezas como a impedância (em ohms) e a potência aparente (em volt-ampere) são exemplos de quantidades complexas. Os algoritmos recursivos no plano complexo criaram na maioria das vezes figuras invariantes por escala denominadas fractais. Estas formas geométricas de dimensão fracionária servem como ferramenta para: descrever as formas irregulares da superfície da terra; modelar fenômenos, aparentemente imprevisíveis ( teoria do caos ), de natureza meteorológica, astronômica, econômica, biológica, entre outras. Antes de iniciar a definição completa sobre números complexos é necessário fazer uma breve explanação da evolução do conceito de número. Os números no qual têm-se contato pela primeira vez são os chamados números naturais. Eles são representados pela letra N, como no formato abaixo: N = {0,1,2,...,n,...} No intuito de expandir este conjunto de números,para admitir que a subtração de dois números naturais seja possivel, surgiram os números inteiros que são representados pela letra Z: Z = {..., -n, ..., -2, -1, 0, 1, 2, ..., n,...} Motivado pela imperfeição [da Justa Medeiros 1972], pois a divisão não é bem definida em Z, ou seja, dados dois inteiros, a e b (b 6= 0), nem sempre é possível encontrar o quociente de a por b em Z. Para incluir a divisão de dois números naturais quaisquer, faz-se necessário a criação dos números racionais, representados por Q. CAPÍTULO 2. NÚMEROS COMPLEXOS 8 Mas em Q ainda existem certas imperfeições, como por exemplo, a solução da equação x2 = 3 não pode ser encontrada em Q. Desta maneira para construir um conjunto mais amplo que permitisse uma solução a este tipo de equação, surgiram os números reais, representado por R. Desta forma pode-se dizer que os números naturais seriam um subconjunto dos números inteiros, que por consequente seria um subconjunto dos racionais e este um subconjunto dos reais. Mas este sistema já mencionado ainda não é suficiente, pois não permite encontrar a solução para a equação x2 + 4 = 0. Neste caso não é possível encontrar uma solução dentro dos conjuntos citados. É aí que entra a definição de números complexos. 2.2 Os Números Complexos As definições contidas neste capítulo estão mencionadas em [Dias & Dantas 2006], [Santos 2001], [Lohner et al. 1985],[Alefeld & Herberger 1983], [Petkovic & Petkovic 1998], [Candu et al. 2006] e [Blomquist et al. 2005a]. Seja R o conjunto dos números reais e o produto cartesiano R2 ={(a,b) | a ∈ R e b ∈ R} Ou seja, R2 é o conjunto dos pares ordenados (a,b) em que a e b são números reais. O conjunto dos números complexos consiste no conjunto de todos os pares ordenados de números reais (a, b) ∈ R2 , juntamente com as regras pelas quais estes serão igualados, adicionados, multiplicados e assim por diante. Este conjunto é representado pela letra C. Para exemplificar serão levados em consideração os dois pares ordenados (a,b) e (c, d) de R2 , como segue abaixo: 1. Igualdade: dois pares ordenados são iguais se, e somente se, seus primeiros e últimos termos forem iguais. (a, b) = (c, d) <=> a = c e b = d 2. Adição: para obter um novo par ordenado a partir da soma dos dois primeiros, é necessário fazer a soma dos primeiros e últimos termos dos pares fornecidos. (a, b) + (c, d) = (a + c, b + d) CAPÍTULO 2. NÚMEROS COMPLEXOS 9 3. Multiplicação: para obter o primeiro elemento do novo par ordenado é necessário fazer a diferença entre o produto dos primeiros termos e o produto dos últimos termos fornecidos e para obter o segundo elemento é preciso somar os produtos do primeiro termo de cada par pelo segundo termo do outro. (a, b) · (c, d) = (ac − bd, ad + bc) 4. Subtração: pode-se subtrair dois pares ordenados fazendo as diferença entre primeiros e últimos termos. (a, b) − (c, d) = (a − c, b − d) 5. Divisão: obtêm-se um novo par ordenado a partir de uma operação de divisão fazendo uma multiplicação entre dois pares ordenados. Sendo que o primeiro par desta multiplicação é o primeiro par fornecido, o primeiro termo do segundo par é composto pela divisão do primeiro termo do segundo par informado pela soma dos quadrados destes termos e o segundo termo do novo par é composto pela diferença da divisão entre o segundo termo do segundo par informado pela soma dos quadrados destes termos. a b ca + db da − cb (c, d) = (c, d) 2 ,− = , (a, b) a + b2 a2 + b2 a2 + b2 a2 + b2 Exemplos: 1 - Adição (2,5) + (3,7) = (2 + 3, 5 + 7)=(5,12) 2 - Multiplicação (1,2).(3,5) = (1.3 - 2.5, 1.5 + 2.3)=(-7, 11) 3 - Subtração (4,6) - (3,1) = (4 - 3,6 - 1)=(1,5) 3 4 11 2 4 3 (1, 2) = (1, 2) · 2 ,− = (1, 2) · ,− = , 4 - Divisão (3, 4) 3 + 42 32 + 42 25 25 25 25 Dessa forma, o conjunto dos números complexos podem ser vistos como uma estrutura algébrica da forma R =< R2 , +, −, ·, / >. Apesar de um número complexo ser um par ordenado (r, g) ∈ R2 , pode-se representálos ainda de duas formas distintas, chamadas: forma algébrica e forma polar. 2.2.1 Representação Algébrica Um número complexo c = (a, b) pode ser representado como c = a + ib, com a e b ∈ R, onde a é chamada parte real e b parte imaginária. Essa representação chama-se CAPÍTULO 2. NÚMEROS COMPLEXOS 10 representação algébrica. O segundo componente de um complexo c = (a, b) chama-se parte imaginária. Observe que c = (a, b) pode ser representado como c = a(1, 0) + b(0, 1). (0,1) chama-se unidade imaginária e é representado pela letra i. A representação algébrica c = a + ib na verdade expressa a combinação linear c = a(1, 0) + b(0, 1). Um complexo c é dito um número real se, somente se, sua parte imaginária for igual a zero, é dito imaginário puro quando sua parte real é igual a zero e é chamado de nulo quando ambas as partes são iguais a zero. Sendo assim, observe que i2 = (0, 1).(0, 1) = (0.0 − 1.1, 0.1 + 1.0) = (−1, 0), que corresponde ao número real -1. Portanto, é possível escrever i2 = −1 √ Logo, −1 = i. Uma noção importante que ajuda a operacionalidade dos números complexos é a de conjugado. Chamamos conjugado de um complexo c = a + ib, o complexo c = a − ib. Dessa maneira, a forma algébrica z = a + ib torna-se muito mais operacional que a de par ordenado (a, b) como representação de números complexos. A seguir serão novamente apresentadas as definições de igualdade, adição e multiplicação de complexos, agora usando a representação algébrica. 1. Igualdade: Dois números complexos são iguais se tanto suas partes reais quanto suas partes imaginárias são iguais. a + ib = c + id <=> a = c e b = d 2. Adição: Obtêm-se um novo complexo a partir de uma adição realizando uma soma onde sua parte real é composta pela soma das partes reais das parcelas e sua parte imaginária é formada pela soma das partes imaginárias da parcela. (a + ib) + (c + id) = (a + c) + (b + d)i 3. Multiplicação: Um novo complexo obtido a partir de uma multiplicação é o resultado do desenvolvimento de (a + ib)(c + id), encarando ib e id como se fossem números reais, aplicando a propriedade distributiva e levando em consideração que i2 = −1. Tem-se o seguinte: (a + ib)(c + id) = a(c + id) + ib(c + id) = ac + iad + ibc + ibd 2 = (ac − bd) + i(ad + bc). CAPÍTULO 2. NÚMEROS COMPLEXOS 11 4. Divisão: A divisão agora é bem mais simples de ser obtida. Basta multiplicar o numerador, c1 = c + id e denominador pelo conjugado do denominador c2 = a + ib, com c2 6= 0 + 0i. c + id(a − ib) ca + db da − cb c1 = = 2 + i c2 (a + ib)(a − ib) a + b2 a2 + b2 Exemplos: 1 - Adição: (5 + i3) + (3 + i4) = (8 + i7) 2 - Conjugado: c = 6 + i9 → c = 6 − i9 3 - Multiplicação: (2 + i3).(5 + i4) = 2(5 + i4) + i3(5 + i4) = 10 + i8 + i15 + i2 12 = 10 + i8 + i15 − 12 = −2 + i23 4 - Divisão: 2.2.2 (3 + i)(4 − i2) 14 − i2 (3 + i) = = (4 + i2) (4 + i2)(4 − i2) 12 + i16 Representação Polar É possível associar um ponto P = (a, b) no plano cartesiano ao número complexo c = a + ib, onde pode-se representar a parte real por um ponto no eixo real e a parte imaginária por um ponto no eixo imaginário. A Figura 2.1 representa a interpretação geométrica de um número complexo. Figura 2.1: Interpretação geométrica dos números complexos √ Pode-se perceber que a distância entre P e O é o módulo de c, ou seja, OP = a2 + b2 = |c|, e o ângulo composto por OP com o eixo real é θ, logo θ é o argumento principal de c. Isso dá origem as seguintes definições: CAPÍTULO 2. NÚMEROS COMPLEXOS 12 1. Norma: A norma de um número complexo c = a + ib é definida por N(c) = a2 + b2 ; 2. Módulo ou valor absoluto: O módulo de um número complexo é representado pela √ p raiz quadrada da sua norma; ou seja: |c| = N(c) = a2 + b2 . Geralmente usa-se a letra grega ρ para representar |c|; 3. Argumento: O argumento de um número complexo c = a + ib, denotado por arg(c) é o ângulo θ, medido em radianos, 0 ≤ θ ≤ 2π, formado pelo vetor com o eixo real, b a e senθ = . tal que, cos θ = |c| |c| A forma polar de um número complexo c = a + ib é o par (ρ, θ) associado a C. A Figura 2.2 apresenta a representação polar do número complexo c = 5 + i3 no plano de Argand-Gauss. Figura 2.2: Forma algébrica e polar do complexo c = 5 + i3 A representação polar de um número complexo pode ser convertida para a representação algébrica e vice-versa, como é determinado a seguir através dos exemplos: 1. Transformação do número complexo algébrico c = 2 + i2 na forma polar: CAPÍTULO 2. NÚMEROS COMPLEXOS 13 √ √ √ √ 22 + 22 = 4 + 4 = 8 = 2 2. 2 1 1 cos θ = √ = √ . Portanto θ = arcsin cos θ = arcsin √ = 45. 2 2 2 2 √ Logo a representação polar para c = 2 + i2 é o par (2 2, 45) = (2.828417, 45). |c| = 2. Transformação do número complexo polar (4.47, 26.57o ) na forma algébrica: a a = cos 26, 57o = . Portanto a ∼ = 4. |c| 4, 47 b b sin θ = = sin 26, 57o = Portanto b ∼ = 2. |c| 4, 47 cos θ = Logo a representação algébrica do número complexo polar (4.47, 26.57o ) é 4 + i2. 2.2.3 Funções Complexas Elementares Além da aritmética complexa, existem operações sobre C que são elementares. Nesta seção expomos algumas funções sobre C: Função multiplicação por complexo na forma polar Seja A = r0 (cosθ0 + isenθ0 ) e z = r(cosθ + isenθ), então Az = rr0 [cos(θ + θ0 ) + sen(θ + θ0 ))], ou seja, o cumprimento de z é multiplicado pelo cumprimento de A e seu ângulo θ é modificado para θ + θ0 . Função quadrática Sendo z = r(cosθ + isenθ), então z2 = r2 (cos2θ + isen2θ). Neste caso, z2 dobra o ângulo de z. Sendo assim, quando 0 ≤ θ ≤ π2 , então 0 ≤ 2θ ≤ π. Função inversão Esta função é definida por w = 1z . Algumas observações devem ser levadas em consideração: • Quando |z| = 1, então |w| = 1 = 1. |z| CAPÍTULO 2. NÚMEROS COMPLEXOS • Quando |z| < 1, então |w| = 14 1 > 1, ou seja, w leva o interior do círculo unitário |z| em seu exterior. 1 • Quando |z| > 1, então |w| = < 1, ou seja, w leva o exterior do círculo unitário |z| no seu interior. 1 z̄ = 2 . Então w leva primeiro z no seu complexo conjugado z̄ e em seguida z |z| 1 multiplica-o pelo inverso do quadrado do seu comprimento 2 . |z| w= Função exponencial 0 0 Na função exponencial real f , sabe-se que f (x + x0 ) = ex+x = ex ex , onde e é a base do logaritmo natural e vale aproximadamente 2,718281828459045. Ou seja, f (x + x0 ) = f (x) f (x0 ) e f (0) = 1. Estendendo este conceito para números complexos, toma-se a função g(y) = cos y + i sin y. Logo g(y)g(y0 ) = g(y + y0 ) e g(0) = 1. Ou seja, ela tem a mesma propriedade que a exponencial real. Sendo assim pode-se definir eiy = cos y + i sin y, onde y ∈ R. Mantendo esta propriedade, para z = x + iy, então ez = ex+iy = ex .eiy . Como eiy = cos y + i sin y então ez = ex (cos y + i sin y), z ∈ C. Observação 1: Como a exponencial leva o número complexo z = x + iy no número w = ρeiθ , em que ρ = ex e θ = y, então todo número complexo na forma z = x + iy pode ser expresso na forma z = ρeiy , chama-se forma polar de z, que, como foi visto, pode ser resumido como o par (ρ, y) A função exponencial leva o número z = x + iy ao número w = ex .eiy transformando coordenadas cartesianas em coordenadas polares. Se z e z0 são dois números complexos, então temos as seguintes propriedades da exponencial complexa: • • • • • Propriedade 1: Propriedade 2: Propriedade 3: Propriedade 4: Propriedade 5: e0 = 1; 0 0 ez+z = ez ez ; z 0 ez−z = ez0 ; e ez 6= 0; ez+2πi = ez ; CAPÍTULO 2. NÚMEROS COMPLEXOS 15 A demonstração destas propriedades podem ser vistas em [Dias & Dantas 2006]. Funções trigonométricas Em números complexos as funções trigonométricas são definidas por: cosz = e senz = eiz − e−iz . 2i eiz + e−iz z Função logarítmica São definidas log z através das seguintes equivalências: log z = w se, somente se, Determinando w = u+iv, então |ew | = |eu+iv | = |eu ||eiv | = eu . Escrevendo z = reiθ , de ew = z, segue-se que |ew | = |z|, ou seja, eu = r, o que dá u = lnr, onde ln é o logaritmo natural de r. ew = z. Mas ew = z também pode ser visto como eu eiv = reiθ , como eu = r então eiv = eiθ , donde v = θ + 2kπ, k ∈ Z. Substituindo estes dados na equação original, obtêm-se log z = lnr + i(θ + 2kπ), k ∈ Z. Sendo r = |z| e θ + 2kπ = argz, então log z = ln|z| + iargz. Desta forma, é possível observar que existem diversos valores do logaritmo para um mesmo número complexo. Para obter apenas um resultado é preciso tomar como valor do argumento de z, seu argumento principal, 0 ≤ argz < 2π, resultando no logaritmo principal de z denotado por log z = ln|z| + iargz. Caso z = reiθ então log z = lnr + iθ. 2.3 Números complexos intervalares A matemática intervalar foi uma das soluções propostas para reduzir o custo dos erros de uma computação numérica e aumentar a informação com respeito a exatidão dos cálculos matemáticos. Criada paralelamente por Moore e Sunaga na década de 50, ela usa intervalos fechados como forma de representar dados de entrada inexatos ou que não podem ser representados finitamente numa máquina e que causam erros de truncamento ou arredondamento durante a execução de um programa [Santos 2001]. Segundo [Lohner et al. 1985], na aritmética complexa intervalar existem três diferentes tipos de intervalos: retangulares, circulares e setoriais. Neste capítulo serão apresentados e definidos os números complexos intervales, em conjunto com suas aritméticas. Mas antes é preciso entender como é desenvolvida uma aritmética intervalar no conjunto dos CAPÍTULO 2. NÚMEROS COMPLEXOS 16 números reais, pois assim como um número complexo é obtido a partir de números reais, espera-se que os números complexos intervalares sejam obtidos a partir de intervalos reais. É o que será visto nas próximas seções. 2.3.1 Aritmética Intervalar Real Aqui serão apresentadas a aritmética intervalar de Moore, algumas propriedades referentes às operações, bem como relações que são definidas sobre intervalos reais. Definição 2.3.1.1 (Intervalo real) Um intervalo [a, b] é definido como sendo um conjunto de números reais da forma [a, b] = {x ∈ R |a ≤ x ≤ b} O conjunto de todos os intervalos é definido por I(R) = {[a, b] ∈ R|a ≤ b} Definição 2.3.1.2 (Igualdade) Dados X = [x1 , x2 ] e Y = [y1 , y2 ]. Então X = Y se, e somente se x1 = y1 e x2 = y2 . Definição 2.3.1.3 (Interseção) Dados os intervalos X = [x1 , x2 ] e Y = [y1 , y2 ]. A interseção dos intervalos é dado por X ∩Y = [max{x1 , y1 }, min{x2 , y2 }], se max{x1 , y1 } ≤ min{x2 , y2 }]. Se max{x1 , y1 } > min{x2 , y2 }], então X ∩Y não está definida. Definição 2.3.1.4 (União) Sejam X = [x1 , x2 ] e Y = [y1 , y2 ]. Se X ∪ Y 6== 0, então a união entre os intervalos X e Y é definida por X ∪Y = [min{x1 , y1 }, max{x2 , y2 }] Aritmética de Moore Uma aritmética intervalar é um conjunto de operações compostas por soma, diferença, multiplicação e divisão sobre o conjunto I(R). No que segue, apresenta-se a aritmética intervalar proposta por Moore. (Soma) Dados X = [x1 , x2 ] e Y = [y1 , y2 ]. A soma X +Y é dada por CAPÍTULO 2. NÚMEROS COMPLEXOS 17 X +Y = [x1 + y1 , x2 + y2 ] = {x + y | (x ∈ X)&(y ∈ Y )} (Pseudo inverso Aditivo) Seja X = [x1 , x2 ]. Então −X = [−x2 , −x1 ] = {−x | x ∈ X} (Intervalo simétrico) Seja X um intervalo. Diz-se que X é um intervalo simétrico se X = −X (Subtração) Sejam X = [x1 , x2 ] e Y = [y1 , y2 ]. A subtração X −Y é dada por X −Y = [x1 − y2 , x2 − y1 ] = {x − y | (x ∈ X)&(y ∈ Y )} (Multiplicação) Sejam X = [x1 , x2 ] e Y = [y1 , y2 ]. Então X.Y = {x.y | (x ∈ X)&(y ∈ Y )} = [min{x1 y1 , x1 y2 , x2 y1 , x2 y2 }, max{x1 y1 , x1 y2 , x2 y1 , x2 y2 } (Pseudo inverso multiplicativo) Seja X = [x1 , x2 ] tal que 0 ∈ / X. Então X −1 = [ x12 , x11 ] = { 1x | x ∈ X} (Divisão) Sejam X = [x1 , x2 ] e Y = [y1 , y2 ] tal que 0 ∈ / Y . Então X/Y = {x/y | (x ∈ X)&(y ∈ Y )} = [min{x1 /y2 , x1 /y1 , x2 /y2 , x2 /y1 }, max{x1 /y2 , x1 /y1 , x2 /y2 , x2 /y1 } As subseções 2.3.2 a 2.3.4 apresentam três abordagens para a representação de números complexos intervalares. Este trabalho implementará apenas a primeira abordagem. 2.3.2 Aritmética Complexa Intervalar Retangular Sejam A e B ∈ I(R). Então o conjunto de números complexos Z = {z1 + iz2 |z1 ∈ A, z2 ∈ B} é chamado intervalo complexo. Os intervalos complexos constituem retângulos no plano complexo com lados paralelos aos eixos das coordenadas e, portanto, assim como os números complexos pode ser representado como o par (A,B), ou na forma algébrica A + iB, para A e B ∈ I(R). O conjunto desses retângulos é denotado por I(C), onde C é o conjunto dos números complexos. Assim, um número complexo z = z1 + iz2 é portanto, um elemento de intervalo CAPÍTULO 2. NÚMEROS COMPLEXOS 18 complexo Z = [a, b] + i[c, d] ∈ I(C), onde z1 ∈ [a, b] e z2 ∈ [c, d]. Seja A = A1 + iA2 e B = B1 + iB2 dois membros de I(C). Diz-se que A e B são iguais se, somente se, A1 = B1 e A2 = B2 De acordo com [Alefeld & Herberger 1983], a relação de igualdade entre elementos de I(C) proposta anteriormente é: reflexiva, simétrica e transitiva. Sejam as seguintes operações binárias definidas sobre os elementos de I(C) operações que sejam as conhecidas na literatura como aritmética retangular [Petkovic & Petkovic 1998]: 1. A + B = (A1 + B1 ) + i(A2 + B2 ); 2. A − B = (A1 − B1 ) − i(A2 − B2 ); 3. A.B = (A1 B1 − A2 B2 ) + i(A1 B2 + A2 B1 ); 4. A : B = 2.3.3 A1 B1 + A2 B2 iA2 B1 − A1 B2 + , onde 0 ∈ / (B1 )2 + (B2 )2 . (B1 )2 + (B2 )2 (B1 )2 + (B2 )2 Aritmética Complexa Intervalar Circular Seja c ∈ C um número complexo e r ∈ R, tal que r ≥0. [Petkovic & Petkovic 1998] define o conjunto Z = {z ∈ C | |z − c| ≤ r} como sendo um intervalo circular ou disco. O conjunto de intervalos circulares é representado por K(C). Um disco com centro c e raio r é escrito como Z = (c; r). Dois discos A = (c1 , r1 ) e B = (c2 , r2 ) são iguais se, e somente se, c1 = c2 e r1 = r2 Esta relação de igualdade é reflexiva, simétrica e transitiva. Sejam {+, −, ., :} operações binárias sobre os números complexos. Se A = (a; r1 ) e B = (b; r2 ) pode-se definir as seguintes operações: CAPÍTULO 2. NÚMEROS COMPLEXOS 19 1. A + B = (a + b; r1 + r2 ); 2. A − B = (a − b; r1 + r2 ); 3. 1 B = r2 b̄ , |b|2 −(r2 )2 |b|2 −(r2 )2 para 0 ∈ / B; 4. A.B = (ab; |a|r2 + |b|r1 + r1 r2 ); / 0. 5. A : B = A. B1 para B ∈ Dado um complexo arbitrário w ∈ C, tem-se alguns casos especiais de adição, subtração e multiplicação de discos: 1. w + (c; r) = (w + c; r); 2. w − (c; r) = (w − c; r); 3. w.(c; r) = (wc; |w|r); Sendo W = (c; r) ∈ K(C), então (a) |W | = |c| + r é chamado de valor absoluto de W e (b) d(A) = 2r é chamado de amplitude de W . 2.3.4 Aritmética Complexa Intervalar Usando a Forma Polar Esta subseção é baseada no artigo "Complex Interval Arithmetic Using Polar Form"[Candu et al. 2006]. Definição Sejam ρ− , ρ+ , θ− , θ+ ∈ R+ e os intervalos de extremos reais [ρ] = [ρ− , ρ+ ] e [θ] = [θ− , θ+ ] . O conjunto definido por Z = {z ∈ C|z = ρeiθ , ρ ∈ [ρ], θ ∈ [θ]} CAPÍTULO 2. NÚMEROS COMPLEXOS 20 é chamado intervalo complexo polar ou setor intervalar e é denotado por ([ρ], [θ]) 1 Os intervalos [ρ] e [θ] são as representações intervalares, respectivamente, do módulo e do ângulo de um complexo z ∈ Z. Para garantir a exclusividade da representação, sempre é possível escolher os limites do último intervalo (θ+ − θ− ≤ 2π, 0 ≤ θ− < 2π e 0 ≤ θ+ < 4π). O conjunto de todos os setores intervalares é denotado por S(C). Aritmética de intervalos polares Sejam Z1 e Z2 dois setores de S(C) e * uma das quatro operações aritméticas em C. Como o conjunto de intervalos reais é fechado com relação à adição e multiplicação, é possível observar que o produto de dois setores intervalares é também um setor intervalar: • Z1 ∗ Z2 = {z1 ∗ z2 |z1 ∈ Z1 , z2 ∈ Z2 } i(θ +θ ) • {ρ1 ρ2 1 2 |ρ1 ∈ [ρ1 ], ρ2 ∈ [ρ2 ], θ1 ∈ [θ1 ], θ2 ∈ [θ2 ]} • {[ρ1 ] ∗ [ρ2 ], [θ1 ] + [θ2 ]}. No caso da divisão obtêm-se: Z1 /Z2 = ([ρ1 ]/[ρ2 ], [θ1 ] − [θ2 ]). Nestas operações, os intervalos [θ1 ] + [θ2 ] e [θ1 ] − [θ2 ], embora computados pela aritmética intervalar, já não podem ser verificadas pelas condições citadas anteriormente. No entanto, como todos os ângulos não possuem valores de módulo 2π, pode-se ajustar adicionando ou subtraindo 2π do seus limites inferiores e superiores até que as condições sejam cumpridas. O conjunto Z1 ⊕ Z2 = {z1 + z2 |z1 ∈ Z1 , z2 ∈ Z2 }, conhecido como soma de Minkowski, não é um setor mas possui uma forma complexa. Para definir adição como uma operação em S(C) é preciso determinar alguns elementos de S(C) que contém este conjunto. Z1 + Z2 é definido como o menor setor contendo Z1 ⊕ Z2 : Z1 + Z2 = ∩Z, Z ∈ S(C), Z1 ⊕ Z2 ⊂ Z 1 Lembre-se que z = ρeiθ é outra forma de representação de um complexo. Ver Observação 1. CAPÍTULO 2. NÚMEROS COMPLEXOS 21 A subtração é definida da mesma maneira. Caracterização da soma de setores Seja Z1 = ([ρ1 ], [θ1 ]) e Z2 = ([ρ2 ], [θ2 ]) dois setores e Z sua soma, então os limites ρ− e ρ+ de [ρ] devem verificar: ρ− = min|z|, z ∈ Z1 ⊕ Z2 ρ+ = max|z|, z ∈ Z1 ⊕ Z2 Da mesma forma, os limites de [θ] são soluções de: θ− = minA(z), z ∈ Z1 ⊕ Z2 θ+ = maxA(z), z ∈ Z1 ⊕ Z2 onde A(z), o ângulo de um complexo z, é definido sobre Z1 ⊕ Z2 tal que A(z) ∈ [θ− , θ+ ]. 2.3.5 Funções Complexas Intervalares Elementares A seguir serão apresentadas as definições formais de cada uma das funções complexas intervalares elementares, na representação polar, elas estendem as suas respectivas funções reais [Blomquist et al. 2005a]. Função quadrada (Z 2 ) Seja Z = X +Yi ∈ I(C) Z 2 = (X −Y ) · (X +Y ) + i.(2.X.Y ). (2.1) As funções potência, raiz quadrada e logaritmo assumem Z = ([ρ], [θ]), onde [ρ] = e [θ] = [θ− ; θ+ ]. [ρ− ; ρ+ ] Função potência (Z n ) Para n = -1, 0, 1 e 2 as funções para Z n são implementadas como 1/Z, 1, Z, e Z 2 , respectivamente. Para n ≤ −2 ou n ≥ 3 ver [Blomquist et al. 2005b]. CAPÍTULO 2. NÚMEROS COMPLEXOS 22 √ Raiz quadrada ( Z) Seja sqrt(z) = √ ρ{cos(θ/2) + i. sin(θ/2)}, −π < θ ≤ +π. (2.2) Podemos definir sqrt(Z) como: sqrt(Z) = {sqrt(z)|z ∈ Z ∈ I(C)}. (2.3) ln(Z) = ln(abs(Z)) + i.arg(Z). (2.4) Função logaritmo Funções Trigonométricas De acordo com [da Silva 2007], a forma de onda das funções seno e cosseno são responsáveis pela grande utilidade nas aplicações matemáticas. A seguir serão apresentadas algumas funções trigonométricas. Função seno sen(Z) = sen(X).cosh(Y ) + i.cos(X).senh(Y ). (2.5) cos(Z) = cos(X).cosh(Y ) − i.sen(X).senh(Y ). (2.6) Função cosseno Função tangente tan(Z) = sin(2X) sinh(2Y ) + i. . cos(2X) + cosh(2Y ) cos(2X) + cosh(2Y ) (2.7) Função co-tangente cot(Z) = tan π 2 −Z . (2.8) CAPÍTULO 2. NÚMEROS COMPLEXOS 23 Funções Trigonométricas Inversas Função arco cosseno arccos(Z) = tan π 2 − arcsen(Z) . (2.9) Função arco tangente 1 1 + iZ arctan(Z) = tan .Ln . 2i 1 − iZ (2.10) Função arco co-tangente 1 . arccot(Z) = arctan Z (2.11) senh(Z) = senh(X).cos(Y ) + i.cosh(X).sen(Y ) (2.12) Funções Hiperbólicas Função seno hiperbólico Função cosseno hiperbólico cosh(Z) = cosh(X).cos(Y ) + i.senh(X).sen(Y ). (2.13) Função tangente hiperbólico tanh(Z) = −i.tan(iZ). (2.14) Função co-tangente hiperbólico coth(Z) = i.cot(iZ). (2.15) CAPÍTULO 2. NÚMEROS COMPLEXOS 2.4 24 Considerações Este capítulo apresentou os números complexos com suas representações e aritméticas. Pôde-se observar que a escolha entre a representação retangular e a polar vai depender da aplicação que está sendo desenvolvida. As principais funções foram incluídas no trabalho com o intuito de nortear o leitor ao se deparar com a proposta do mesmo, já que tais funções, tanto as complexas quanto as complexas intervalares, serão implementadas para JAVA-XSC. No módulo complexo foi implementado tanto a forma retangular, quanto funções de conversão para a forma polar. Já no módulo complexo intervalar apenas a forma retangular foi implementada. Foi visto também que os números complexos intervalares são obtidos a partir de intervalos reais, sendo assim este capítulo apresentou a aritmética intervalar real e logo em seguida a aritmética complexa intervalar em suas representações retangular e polar. No próximo capítulo serão vistas algumas ferramentas que auxiliam na resolução de problemas matemáticos. Algumas delas, como CLN e MPC, trabalham com números complexos, ambas na forma retangular. Além disso, serão apresentadas algumas linguagens XSC que também implementam funções complexas. Capítulo 3 Algumas ferramentas para cálculo numérico 3.1 Introdução Neste capítulo serão apresentadas algumas das bibliotecas desenvolvidas para o aperfeiçoamento do cálculo numérico computacional, em especial, as que trabalham com a matemática intervalar. Estas ferramentas utilizam diversos modos de arredondamento para tratar a forma como seus resultados serão exibidos. Os modos de arredondamento são melhores esclarecidos no Anexo A. Para cada ferramenta/biblioteca serão informados dados gerais de sua criação, os tipos numéricos implementados e os modos de arredondamento implementados. 3.2 CLN (Class Library for Numbers) As informações contidas nesta seção foram baseadas no Manual da CLN ([Haible 2005]). CLN1 é uma biblioteca eficiente para computação que contém todos os tipos de números com precisão arbitrária. Ela foi escrita por Bruno Haible e sua versão atual é mantida por Richard Kreckel. A biblioteca é distribuída sobre a GNU General Public License [Brent & Zimmermann 2009]. CLN foi escrita em C++ e as motivações para isto é que a linguagem provê eficiência (compilada em código de máquina), segurança (C++ não permite que uma variável de um tipo assuma um valor que não seja daquele tipo) e uma 1 http://www.ginac.de/CLN/ CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 26 sintaxe algébrica. Esta biblioteca tem por principais características: • Rico conjunto de classes numéricas: Inteiro(precisão ilimitada), racional, float (short, single, double e long), complexo, inteiro modular, polinomial univariada. • Funções elementares (+, -, *, /, sqrt, comparações, ...), lógicas(and, or, not, ...) e transcendentais(exponencial, logaritmo, trigonometria, funções hiperbólicas e suas funções inversas). • Eficiência de Memória. • Eficiência de velocidade: O kernel da CLN foi escrito em linguagem assembly para algumas CPUs e ela usa divisão binária para avaliação rápida da série de números racionais à medida que ocorrem na avaliação de funções elementares e algumas constantes. • Interoperabilidade: Apresenta coleta de lixo sem qualquer obrigação para a aplicação principal e ganchos para alocação de memória e exceções. 3.2.1 Tipos Numéricos A CLN implementa as classes númericas presentes na hierarquia ilustrada na Figura 3.1. A classe base cl_number é uma classe abstrata, sendo assim, não pode ser usada para declarar uma variável. A classe cl_N compreende aos tipos real e números complexos. A classe cl_R também é uma classe abstrata e compreende os números reais de diferentes tipos. A classe cl_RA corresponde exatamente aos números reais: números racionais, incluindo inteiros. A classe cl_F é uma classe abstrata que implementa aproximações de ponto-flutuante para números reais. 3.2.2 Números Exatos Alguns números são apresentados como números exatos, ou seja, não há perda de informações quando os números são convertidos de um valor matemático para sua representação interna. Em CLN os números exatos são: números racionais (incluindo inteiros) e os números complexos no qual as partes real e imaginária são números racionais. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 27 Figura 3.1: Hierarquia dos tipos numéricos em CLN Os números racionais são sempre normalizados na forma numerador/denominador onde ambos são inteiros comprimidos e o denominador é positivo, se o resultado do denominador for 1, o número racional é convertido para inteiro. 3.2.3 Números de Ponto-Flutuante Como nem todos os números podem ser representados de forma exata, algumas aproximações são necessárias. CLN implementa números de ponto-flutuante com mantissa e expoente. Os números de ponto-flutuante podem ser de quatro tipos distintos: • Flutuantes curtos (cl_SF): possui 1 bit de sinal, 8 bits de expoente (incluindo o sinal do expoente) e 17 bits de mantissa (incluindo o bit ’oculto’). • Flutuantes simples (cl_FF): possui 1 bit de sinal, 8 bits de expoente (incluindo o sinal do expoente) e 24 bits de mantissa (incluindo o bit ’oculto’). São representados como os pontos-flutuantes de precisão simples da IEEE e corresponde ao tipo float da C/C++. • Flutuantes duplos (cl_DF): possui 1 bit de sinal, 11 bits de expoente (incluindo o CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 28 sinal do expoente) e 53 bits de mantissa (incluindo o bit ’oculto’). São representados como os pontos-flutuantes de precisão dupla da IEEE e corresponde ao tipo double da C/C++. • Flutuantes longos (cl_LF): possui 1 bit de sinal, 32 bits de expoente (incluindo o sinal do expoente) e n bits de mantissa (incluindo o bit ’oculto’), onde n >= 64. Sua precisão é ilimitada, mas uma vez criada, um flutuante longo tem uma precisão fixa. CLN não implementa recursos como NaNs, números desnormalizados e estouro (underflow). Se o alcance do expoente de alguns tipos de pontos-flutuantes é limitado para alguma aplicação, então é necessário optar por outro com o expoente maior. 3.2.4 Números Complexos Os números complexos implementados na classe cl_N possuem uma parte real e uma imaginária, ambos números reais. Um número complexo cuja parte imaginária é o número exato 0 será automaticamente convertido para um número real. Números complexos podem originar-se apenas de números reais. A classe cl_N define a seguinte operação: • cl_N complex (const cl_R& a, const cl_R& b) Retorna o número complexo a + bi, onde a é a parte real e b a parte imaginária. Cada uma das classes cl_N e cl_R definem as seguintes operações: • cl_R realpart (const type& x) Retorna a parte real de x. • cl_R imagpart (const type& x) Retorna a parte imaginária de x. • type conjugate (const type& x) Retorna o complexo conjugado de x. 3.2.5 Funções de Arredondamento Quando um número real é convertido para um inteiro, não há um arredondamento melhor. A forma de arredondamento varia de aplicação para aplicação. The Common CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 29 Lisp e o padrão ISO LISP fornece quatro funções de arredondamento: • • • • 3.3 floor(x): maior inteiro; ceiling(x): menor inteiro; truncate(x): inteiros entre 0 e x (inclusive) o mais próximo de x. round(x): o mais próximo de x. Se x está exatamente na metade entre dois inteiros escolhe-se um deles. GNU MP (GMP) As informações contidas nesta seção foram baseadas no Manual da GMP ([Granlund & the GMP development team 2010]). GMP 2 é uma biblioteca escrita em C com uma aritmética de precisão arbitrária para inteiros, números racionais e números de ponto flutuante [Granlund & the GMP development team 2010]. Ela foi desenvolvida por Torbjorn Granlund e outros contribuintes no ano de 1993, sendo que uma versão preliminar foi criada em 1991. A biblioteca é distribuída sobre a GNU LGPL (esta licença torna a biblioteca livre para usar, compartilhar e melhorar, e permite o repasse do resultado). As aplicações mais interessadas na GNP são aplicações para criptografia e pesquisas, segurança na Internet, sistemas algébricos, pesquisa algébrica computacional, entre diversas outras. Algumas aplicações usam apenas poucas centenas de bits na precisão mas outras podem precisar de milhares de bits. A GNP foi desenvolvida para trabalhar em ambas as situações com bom desempenho, podendo escolher algoritmos baseados no tamanho dos operadores. Essa é uma vantagem em relação a JAVA-XSC pois a mesma está presa a extensão do tamanho por não termos inteiros não sinalizados. Existem várias categorias de funções em GMP: • Inteiro (mpz): esta categoria apresenta cerca de 140 funções aritméticas e lógicas. • Racional (mpq): esta categoria contém cerca de 35 funções, mas todas as funções da aritmética de inteiros podem ser utilizadas aqui também. • Ponto Flutuante (mpf): Esta categoria é utilizada quando o tipo double de C não fornece precisão suficiente para uma aplicação. Aqui encontram-se cerca de 65 funções. 2 http://gmplib.org/ CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 30 • Funções de baixo nível que operam com números naturais. Aqui existe cerca de 30 funções. • Funções diversas: funções para criação de atribuições e funções personalizadas para a geração de números aleatórios. • Suporte externo: Funções aritméticas de ponto-flutuante com arredondamento preciso (MPFR). A partir do GMP 4.2, MPFR é distribuído separadamente do GMP. 3.3.1 Números Racionais Os números racionais são armazenados em objetos do tipo mpq_t. De acordo com [Granlund & the GMP development team 2010], todas as funções da aritmética racional assumem operandos na forma padrão. Forma padrão quer dizer que o denominador e o numerador não possuem fatores em comum e que o denominador é 0 positivo. Zero tem uma representação única . 1 3.3.2 Ponto-Flutuante Ainda segundo [Granlund & the GMP development team 2010], a mantissa de cada f loat tem uma precisão determinada pelo usuário, limitada somente pela capacidade de memória. Cada variável possui sua própria precisão que pode ser incrementada ou decrementada a qualquer momento. O expoente de cada f loat é uma precisão fixa, uma palavra de máquina na maioria dos sistemas. Na versão mais recente (5.0.1), o expoente é uma contagem de membros, por exemplo, sobre um sistema de 32-bit, significa um intervalo de cerca de 2−68719476768 a 268719476736 . Sobre um sistema de 64-bit isto será maior. Cada variável mantém os dados do tamanho da mantissa atualmente em uso. Isso significa que se o f loat é representado exatamente em apenas poucos bits então apenas esses bits serão usados no cálculo, mesmo se a precisão selecionada for alta. Todos os cálculos são realizados com precisão da variável de destino. Cada função é definida para calcular com ’precisão infinita’ seguida pelo truncamento da precisão de destino. A precisão selecionada para a variável possui um valor mínimo. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 31 A mantissa é armazenada em binário. Uma consequência disto é que frações decimais como 0.1 não podem ser representadas de forma exata, o mesmo também ocorre no IEEE double f loats. Funções ’mpf’ e variáveis não possuem uma notação especial para infinito ou NaN, e as aplicações devem tomar cuidado para não sobrecarregar o expoente ou os resultados se tornarão imprevisíveis. As funções mp f não são extensões do IEEE-754, sendo assim, os resultados obtidos em um computador, muitas vezes diferem dos resultados em um computador com uma palavra de tamanho diferente. Esta ferramenta não possui funções para se trabalhar com números complexos. 3.4 MPFR (Multiple Precision Floating-Point Reliable) As informações contidas nesta seção foram baseadas no Manual da MPFR ([Hanrot et al. 2011]). A MPFR3 é uma biblioteca que trabalha com uma aritmética altamente precisa sobre números de ponto flutuante. Escrita em C e baseada na biblioteca GNU MP vista anteriormente, ela provê uma classe de ponto flutuante com semântica precisa. Suas principais características são: • Apresenta um código portável, ou seja, o resultado da operação não depende da máquina na qual esta sendo executada. • a precisão em bits pode ser definida exatamente para qualquer valor válido para cada variável. • MPFR oferece cinco modos de arredondamento do padrão IEEE 754-2008 (provê arredondamento correto e exceções). Com isto, a biblioteca MPFR provê operações de aritmética básica, algumas funções elementares e várias funções especiais, com arredondamento correto a qualquer precisão. 3 http://www.mpfr.org/ CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 3.4.1 32 Modos de Arredondamento Em MPFR são suportados cinco tipos de arredondamento [Hanrot et al. 2011]: • MPFR_RNDN: Arredondamento para o mais próximo (roundTiesToEven no IEEE 754-2008); • MPFR_RNDZ: Arredondamento para o zero (roundTowardZero no IEEE 7542008); • MPFR_RNDU: Arredondamento em direção ao infinito positivo (roundTowardPositive no IEEE 754-2008); • MPFR_RNDD: Arredondamento em direção ao infinito negativo (roundTowardNegative no IEEE 754-2008); • MPFR_RNDA: Arredondamento distante do zero (experimental). O arredondamento para o mais próximo trabalha tal qual o padrão IEEE 754, ou seja, no caso do número estar arredondado exatamente entre dois números representáveis, ele é arredondado para aquele com o bit menos significativo de zero. Por exemplo, o número 2.5, que é representado por 10.1 em binário, é arredondado para 10.0 = 2 com precisão de dois bits e não para 11.0 = 3. A maioria das funções em MPFR utilizam três argumentos, o primeiro é a variável de destino, o segundo são as variáveis de entrada e por último um modo de arredondamento. Estas funções retornam um valor do tipo inteiro, chamado de valor ternário. O valor armazenado na variável de destino é corretamente arredondado, ou seja, MPFR comporta-se como se ela computasse os resultados com uma precisão infinita, então arredonda para a precisão desta variável. Em consequência, no caso de um resultado de arredondamento diferente de zero, o 1 erro no resultado é menor ou igual a ulp (unit in the last place), que é o peso do úl2 timo bit significativo representado no resultado após o arredondamento, resultando em um arredondamento para o mais próximo, e menos que 1 ulp resultando nos modos de arredondamento direcionado. Se o valor do resultado de arredondamento for zero, o valor armazenado na variável de destino é o resultado exato da função matemática correspondente. Se o valor for positivo (negativo), o valor armazenado na variável de destino é maior (menor) que o resultado exato. No caso de um resultado infinito, o resultado é considerado como inexato quando CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 33 obtido por overflow e exato caso contrário. Um resultado NaN sempre corresponde a um valor de retorno exato. 3.4.2 Ponto-Flutuante De acordo com [Fousse et al. 2007], um número de ponto-flutuante x em MPFR é representado por uma mantissa m, um sinal s e um expoente sinalizado e. O tamanho (em bits) da mantissa será de acordo com a precisão, p, de x. Neste caso a mantissa terá p bits 1 significantes e é interpretada como ≤ m < 1. 2 A MPFR utiliza uma estratégia onde cada parte de um número de ponto flutuante apresenta uma precisão local. Segundo [Muller et al. 2009], esta estratégia é muito eficiente, pois o usuário pode alocar grandes precisões somente para variáveis que realmente necessitam delas e pequenas precisões para as outras. Esta ferramenta não possui funções para se trabalhar com números complexos nem intervalos. Mas algumas ferramentas foram construídas baseadas nela, entre elas temos a MPFI, que possui funções específicas para o uso de intervalos, e a MPC, que trabalha com números complexos. 3.5 MPFI (Multiple Precision Floating-Point Interval) As informações contidas nesta seção foram baseadas no Manual da MPFI ([Revol 2002]). MPFI4 é uma biblioteca para aritmética intervalar com precisão múltipla desenvolvida por [Revol & Rouillier 2002]. Esta biblioteca foi escrita em C e desenvolvida seguindo os conceitos da MPFR e GNP. Por ser um software livre ela pode ser adquirida gratuitamente através do site do projeto. Segundo [Revol & Rouillier 2002], múltipla precisão significa que a precisão computada não é limitada à precisão simples ou dupla da máquina dos números de pontoflutuante, no contrário, precisões arbitrárias devem estar disponíveis. Além disso, esta 4 http://perso.ens-lyon.fr/nathalie.revol/software.html CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 34 ’computação precisa’ deve ser ajustada dinamicamente para cumprir a exatidão necessária. Uma das exigências mais requeridas pela aritmética intervalar é facilitar o arredondamento: isso garante que para cada operação, o intervalo computado usando aritmética de ponto-flutuante contenha o intervalo obtido se a aritmética real exata está sendo usada. Ainda mais desejável é um arredondamento direcionado exato para evitar perda de acurácia. No MPFI os intervalos são implementados usando seus extremos que são números de pontos-flutuantes MPFR seguros. 3.5.1 Modos de Arredondamento De acordo com [Revol 2002], apenas dois modos de arredondamento são usados no manuseio de intervalos representados por seus extremos: • MPFI_RNDU: Arredondamento em direção ao infinito positivo; • MPFI_RNDD: Arredondamento em direção ao infinito negativo. A MPFI ainda está em fase de desenvolvimento, no futuro, planeja-se incrementar a biblioteca com novas facilidades tais como diferenciação automática e álgebra linear. 3.6 MPC (Multiple Precision Complex) As informações contidas nesta seção foram baseadas no Manual da MPC ([team 2011]). MPC5 , desenvolvida por [Enge et al. 2011], é uma biblioteca também escrita em C que apresenta uma aritmética precisa sobre números complexos provendo um arredondamento correto. Ela foi escrita baseando-se nas bibliotecas GNU MP e na GNU MPFR. Todas as declarações necessárias para usar MPC estão no arquivo ’mpc.h’, que pode trabalhar tanto com o compilador C quando com C++. Esta biblioteca utiliza a representação cartesiana: o número complexo x + iy é armazenada como um par (x, y) de dois números de ponto-flutuante de precisão arbitrária (pares 5 http://www.lix.polytechnique.fr/Labo/Andreas.Enge/Mpc.html CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 35 real e imaginária). A precisão é o número de bits usados para representar a mantissa das partes real e imaginária. 3.6.1 Modos de Arredondamento O modo de arredondamento especifica a maneira de arredondar o resultado de uma operação complexa, no caso o resultado exato não pode ser representado exatamente na mantissa de destino. O modo de arredondamento de complexos é um par de dois modos de arredondamento: um para a parte real e outra para a parte imaginária. Um modo de arredondamento complexo é da forma MPC_RNDxy, onde x e y pertencem a N (mais próximo), Z (direção ao zero), U (direção ao infinito positivo) ou D (direção ao infinito negativo). O primeiro refere-se ao modo de arredondamento da parte real e o segundo da parte imaginária. Por exemplo: MPC_RNNZ indica que a parte real usará o arrendondamento para o mais próximo e a parte imaginária utilizará o arredondamento em direção ao zero. O arredondamento para o mais próximo trabalha como no padrão IEEE P754, ou seja, no caso do número estar arredondado exatamente no meio de dois números representáveis, ele é arredondado de forma que o último bit significante seja igual a zero. Por exemplo: o número 5 (101 em binário), é arredondado para 4 (100) com uma precisão de dois bits e não para 6 (110). 3.6.2 Funções Complexas As funções ponto-flutuante MPC possuem uma interface que é similar às funções inteiras GMP. O prefixo da função para operações sobre números complexos é mpc_. A computação da precisão acontece da seguinte forma: calcula-se exatamente a operação solicitada (com precisão infinita) e arredonda o resultado na variável de destino com o modo de arredondamento informado. As funções complexas MPC foram desenvolvidas conforme o padrão IEEE P754. O resultado obtido em uma máquina pode ser diferente do resultado que foi executado em outra máquina. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 36 Existem diversas funções divididas em módulos, tais como: funções de atribuição, funções de conversão, funções de comparações, funções de projeções e decomposições, funções aritméticas básicas, funções de potência e logaritmo, funções trigonométricas, funções diversas e funções avançadas. 3.7 INTLIB INTLIB é uma biblioteca desenvolvida para a linguagem Fortran 77 que oferece um padrão nas operações com intervalos, facilitando desta forma, a utilização da aritmética intervalar. Ela alcança portabilidade com arredondamento e pode ser utilizada tanto por Fortran 77 quanto por Fortran 90. A INTLIB tem como principais características [Kearfott et al. 1994]: • Portabilidade. Desta forma os usuários conseguem transferir programas de aplicação de uma máquina para outra e o programa executará eficazmente sem nenhuma alteração, e apresenta uma rigorosa aritimética intervalar para a comunidade Fortran. • Apresenta uma grande quantidade de documentos para as diversas versões disponíveis. • A biblioteca suporta sobrecarga de operador em Fortran 90. • Apresenta um paradigma de teste razoável. • Sinalização de erros simples mas eficiente. As rotinas desta biblioteca são consideradas significativamente legíveis para os usuários, sendo precisas e sem grande número de funções desnecessárias, ou que gerem ambiguidade de interpretação matemática. A INTLIB é dividida em cinco módulos, que são: módulo para aritmética intervalar elementar (Tabela 3.1), módulo de funções intervalares elementares (Tabela 3.2), módulo de funções úteis (Tabela 3.3), módulo de impressão de erros e módulo de constantes matemáticas de programas que é utilizada para inicializar parâmetros e constantes globais. Tabela 3.1: Módulos do INTLIB: Aritmética elementar para intervalos Nome Função ADD Adição SUB Subtração CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO MULT Multiplicação IDIV Divisão RNDOUNT Arredondamento SCLADD Adição de intervalos e números reais SCLMLT Multiplicação de escalar Tabela 3.2: Módulos do INTLIB: Funções padrões para intervalos Nome Função IEXP Exponencial ISQRT Raiz quadrada POWR Potência inteira HIIPOWR Potência para um intervalo não negativo ILOG Logaritmo ISIN Seno ICOS Co-seno IASIN Arco seno IACOS Arco co-seno IATAN Arco tangente IACOT Arco co-tangente ISINH Seno hiperbólico Tabela 3.3: Módulos do INTLIB: Funções úteis Nome Função ICAP Interseção IDISJ Dois intervalos disjuntos IHULL União convexa IILEI Inclusão no fechamento do intervalo 37 CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 3.7.1 IILTI Inclusão no interior IINF Retorna a esquerda do ponto final IMID Ponto médio de um intervalo IMIG Magnitude IRLEI Inclusão de ponto no fechamento do intervalo IRLTI Inclusão de ponto no interior do intervalo ISUP Retorna o ponto final direito IVL1 Constroi intervalo para um ponto IVLABS Construção de um intervalo a partir de outro IVLI Atribuir um intervalo a outro IWID Diâmetro de um intervalo 38 Simulação de Arredondamento Direcionado O arredondamento direcionado simulado é uma forma com a qual fechamentos rigorosos para resultados de pontos-flutuantes podem ser obtidos em FORTRAN 77 e outras linguagens e máquinas que não possuem acesso ao arredondamento direcionado verdadeiro. A única exigência é que os parâmetros aritméticos, tais como a exatidão de uma operação elementar, sejam conhecidos. Para mais detalhes ver [Kearfott 1995]. 3.8 COMMONS MATH Commons Math é uma biblioteca desenvolvida em JAVA composta de um pequeno conjunto de utilitários com objetivo de resolver alguns problemas de programação, como os citados abaixo: • Variâncias e estatísticas de resumo para uma lista de números; • Ajuste de uma reta a um conjunto de pontos por meio de regressão linear; • Encontrar uma curva suave que passe através de uma coleção de pontos (interpolação); CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 39 • Colocação de um modelo paramétrico para um conjunto de medidas usando métodos de mínimos quadrados; • Resolução de equações envolvendo funções reais • Resolução de sistemas de equações lineares; • Solução de equações diferenciais ordinárias; • Minimização de funções multi-dimensional; • Geração de números aleatórios com mais restrições (por exemplo, a distribuição gama), do que é possível usar no JDK; • Realização de testes de significância estatística; • Diversas funções matemáticas tais como fatoriais, coeficientes binomial e "funções especiais". 3.8.1 Organização Commons Math é dividido em catorze sub-pacotes, com base na funcionalidade fornecida. Estes sub-pacotes são: 1. org.apache.commons.math.stat - estatísticas, testes estatísticos. 2. org.apache.commons.math.analysis - integração, interpolação, polinômios. 3. org.apache.commons.math.random - números aleatórios, cordas e de geração de dados. 4. org.apache.commons.math.special - funções especiais (Gama, Beta). 5. org.apache.commons.math.linear - matrizes, resolução de sistemas lineares. 6. org.apache.commons.math.util - matemática comum/ funções estendendo java.lang.Math. 7. org.apache.commons.math.complex - números complexos. 8. org.apache.commons.math.distribution - distribuições de probabilidade. 9. org.apache.commons.math.fraction - números racionais. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 40 10. org.apache.commons.math.transform - métodos de transformação (Fast Fourier). 11. org.apache.commons.math.geometry - geometria (espaços euclidianos e Particionamento Espacial Binária). 12. org.apache.commons.math.optimization - maximização ou minimização da função. 13. org.apache.commons.math.ode - equações diferenciais ordinárias integração. 14. org.apache.commons.math.genetics - algoritmos genéticos. 3.8.2 Números Complexos O pacote org.apache.commons.math.complex é responsável pela criação do tipo número complexo e pela implementação das suas funções. Este pacote é composto pelas seguintes classes: Complex Esta classe é responsável pela representação do número complexo, ou seja, um número com uma parte real e uma parte imaginária. As implementações de operações aritméticas lidam com NaN e valores infinitos de acordo com as regras para o tipo Double, ou seja, equals (java.lang.Object) é uma relação de equivalência para todas as instâncias que têm um NaN, na parte real ou imaginária, por exemplo, são considerados iguais: • 1 + NaNi • NaN + i • NaN + NaNi Construtores: CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 41 1. Complex(double real): Cria um número complexo dado sua parte real. 2. Complex(double real, double imaginaria): Cria um número complexo dado sua parte real e imaginária. Métodos: A Tabela 3.4 apresenta todos os métodos implementados na classe Complex: Tabela 3.4: Métodos da classe Complex Método Função abs() Retorna o valor absoluto de um número complexo acos() Calcula o arco-cosseno de um número complexo add(Complex c) Retorna o complexo cujo valor é (this + c) add(double d) Retorna o complexo cujo valor é (this + d) asin() Calcula o arco-seno de um número complexo atan() Calcula o arco-tangente de um número complexo cosh() Calcula o cosseno hiperbólico de um número complexo createComplex(double r, double i) Cria um número complexo dado sua parte real e imaginária divide(Complex divisor) Retorna um número complexo cujo valor é (this / divisor) Divide(double divisor) Retorna um número complexo cujo valor é (this / divisor) equals(java.lang.Object outro) Testa se dois Complexos são iguais exp() Calcula a função exponencial de um número complexo getArgument() Calcula o argumento de um número complexo getField() Obtem o campo ao qual a instância pertence. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 42 getImaginary() Retorna aparte imaginária de um número complexo getReal() Retorna a parte real de um número complexo hasCode() Obter um hashCode para o número complexo isInfinity() Verifica se ambas as partes de um número complexo tem um valor infinito isNaN() Verifica se uma ou ambas as partes de um número complexo é NaN. log() Calcula o logaritmo natural de um número complexo multiplay(Complex f) Retorna um número complexo cujo valor é (this * f) multiplay(double f) Retorna um número complexo cujo valor é (this * f) multiplay(int f) Retorna um número complexo cujo valor é (this * f) negate() Retorna um número complexo cujo valor é (this) nthRoot(int n) Calcula as n raízes de um número complexo pow(Complex x) Retorna um número complexo elevado à x pow(double x) Retorna um número complexo elevado à x reciprocal() Retorna o inverso multiplicativo sin() Calcula o seno de um número complexo sinh() Calcula o seno hiperbólico de um número complexo sqrt() Calcula a raiz quadrada de um número complexo sqrt1z() Calcula a raiz quadrada de (this -1) substract(Complex s) Retorna um número complexo cujo valor é (this -s) substract(double s) Retorna um número complexo cujo valor é (this -s) tan() Calcula a tangente de um número complexo CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 43 tanh() Calcula a tangente hiperbólica de um número complexo toString() Complex valueOf(double realPart) Cria um número complexo dado a parte real valueOf(double r, double i) Cria um número complexo dado ambas as partes ComplexField Esta classe é responsável pela representação dos números complexos. É composta pelos seguintes métodos: getInstance(): Obtém uma instância única retornando um ComplexField; getOne(): Obtém a identidade multiplicativa e retorna um Complex; getRuntimeClass(): Retorna a classe runtime do FieldElement e getZero(): Obtém a identidade aditiva e retorna um Complex; ComplexFormat Esta classe é responsável pelo formato de um número complexo, Re(c) + Im(c)i. i pode ser substituído por j (ou qualquer outra coisa), e o formato de número de peças reais e imaginárias podem ser configurados. Construtores: 1. ComplexFormat (): Cria uma instância com a parte imaginária padrão, i, e o formato de número padrão para ambas as partes reais e imaginárias. 2. ComplexFormat (formato java.text.NumberFormat): Cria uma instância com um formato de número personalizado para as partes reais e imaginárias. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 44 3. ComplexFormat (java.text.NumberFormat realFormat, java.text.NumberFormat imaginaryFormat): Cria uma instância com um formato de número personalizado para a parte real e um formato de número personalizado para a parte imaginária. 4. ComplexFormat (imaginaryCharacter java.lang.String): Cria uma instância com um carácter personalizado imaginário, e no formato de número padrão para ambas as partes reais e imaginárias. 5. ComplexFormat (imaginaryCharacter java.lang.String, formato java.text.NumberFormat): Cria uma instância com um carácter personalizado imaginário, e um formato de número personalizado para as partes reais e imaginárias. 6. ComplexFormat (imaginaryCharacter java.lang.String, java.text.NumberFormat realFormat, java.text.NumberFormat imaginaryFormat): Cria uma instância com um carácter personalizado imaginário, um formato de número personalizado para a parte real, e um formato de número personalizado para a parte imaginária. Métodos: A Tabela 3.5 apresenta todos os métodos implementados na classe ComplexFormat: Tabela 3.5: Métodos da classe ComplexFormat Método Função format(Complex c) Este método chama mat(Object,StringBuffer,FieldPosition). format(Complex complexo, StringBuffer sb, FieldPosition pos) Formata um objeto complexo para produzir uma string. format(Double c) Esse método chama mat(Object,StringBuffer,FieldPosition). format(Object obj, StringBuffer sb, FieldPosition pos) Formata um objeto para produzir uma string getAvailableLocales() Obtêm um conjunto de localidades para as quais formatos complexos estão disponíveis. for- for- CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 45 getImaginaryCharacter() Acessa o ImaginaryCharacter getImaginaryFormat() Formata o imaginaryFormat getInstance() Retorna o formato padrão complexo para o local atual. getInstance(Locale locale) Retorna o formato padrão complexo para a determinada localidade. getInstance(String ginaryCharacter, locale) Retorna o formato padrão complexo para a determinada localidade. imaLocale getRealFormat() Acessa o realFormat parse(String source) Analisa uma string para produzir um objeto complexo. parse(String source, ParsePosition pos) Analisa uma string para produzir um objeto complexo. 3.9 Linguagens XSC Há cinco décadas que estão sendo desenvolvidas pesquisas com o intuito de possibilitar que máquinas suportem uma aritmética mais poderosa que a do ponto flutuante. A partir daí surgiram as linguagens XSC (eXtended Scientific Computing) que são linguagens para computação científica com algoritmos precisos carregando seu próprio controle de precisão. No final da década de setenta, mais precisamente entre 1976 e 1979, duas universidades alemãs a Universidade Karlshure e Kaiserlautern se uniram para desenvolver uma extensão do PASCAL, que ficou conhecida como PASCAL-SC. Nos anos seguintes, juntamente com a IBM, foi lançada uma versão do FORTRAN 77 implementada em computadores IBM/370 chamada ACRITH-SC. A primeira geração das linguagens científicas foram as linguagens SC. As primeiras linguagens desenvolvidas foram FORTRAN-SC e PASCAL-SC, sendo esta última bastante citada na literatura sobre computação intervalar. Diversos pacotes foram criados para estas linguagens tanto para tarefas numéricas usuais quanto para resolução de sis- CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 46 temas lineares. Uma grande desvantagem desta linguagem é que só estavam disponíveis para uma variedade limitada de computadores [Kearfott 1996]. O desenvolvimento de novas linguagens de programação, como C++ e JAVA, tornaram mais fácil a portabilidade das linguagens, ou seja, C++ e JAVA são capazes de se adaptar a hardwares e softwares. Deste fato surgiram as linguagens XSC, uma segunda geração de linguagens com maior exatidão com suporte a operações intervalares. De acordo com [Dutra 2000], estas novas linguagens para computação científica têm como características principais: • • • • • • • Sobrecarga de operadores, Agrupamento das funções em módulos específicos, Vetores dinâmicos, Arredondamento direcionado, Tipos numéricos primitivos simples, como real, complexo e intervalo; Operadores aritméticos de maior exatidão para os tipos numéricos e Funções elementares de maior exatidão para os tipos numéricos. Nas próximas subseções serão apresentadas duas destas linguagens: PASCAL-XSC e C-XSC. 3.9.1 PASCAL-XSC A linguagem de programação PASCAL-XSC6 é uma ferramenta desenvolvida para solucionar problemas numéricos. Esta nova versão, diferente da PASCAL-SC, tem a vantagem de ser portável para outros hardwares e possui tipos de dados específicos para intervalos, números complexos e matrizes. PASCAL-XSC foi desenvolvida na linguagem e programação C e seus compiladores são utilizados por uma variedade de computadores tais como computadores pessoais, estações de trabalho, mainframes e supercomputadores. Os principais conceitos de Pascal-XSC são [Klatte et al. 1999]: • Padrão ISO do PASCAL; 6 http://www2.math.uni-wuppertal.de/wrswt/xsc/pxsc.html CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO • • • • • • • • • • • • • 47 Conceito de operador universal; Funções e operadores com tipo de resultado arbitrário; Sobrecarga de procedimentos; Rotinas de leitura e escrita; Conceito de módulo; Arrays dinâmicos, acesso e subarrays; Conceito de string; Arredondamento controlado; Produto escalar ótimo; Tipo de padrão dotprecision e tipos aritméticos adicionais; Aritmética de alta-exatidão para todos os tipos; Funções de alta-exatidão e avaliação exata de expressões; Funções e operadores. Esta linguagem pode implementar aplicações em módulos, cuja função é simplificar um programa (código) grande em pequenos blocos de códigos, para resolver problemas numéricos comuns, tais como: • • • • • • • • • • Sistemas de equações lineares e não-lineares; Inversão de matrizes; Autovalores e Autovetores; Avaliação de expressões aritméticas; Avaliação de polinômios e busca de zeros de polinômios; Quadratura numérica; Equações diferenciais; Equações integrais; Diferenciação automática; Otimização. Descrição dos tipos básicos PASCAL-XSC é baseado na linguagem de programação PASCAL. Aqui serão apresentados os tipos básicos de PASCAL e as alterações que foram necessárias durante o desenvolvimento de PASCAL-XSC. Os tipos básicos em Pascal são os tipos integer, boolean, char, tipos de enumeração e subtipos. A seguir eles são definidos: [Klatte et al. 1999] CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 48 Integer: Uma constante literal do tipo integer é uma sequência de dígitos (decimais) com ou sem um sinal de + ou -. Em PASCAL-XSC, um valor do tipo inteiro pode também ser escrito como uma constante hexadecimal inicializada com o caractere $ e seguido por uma sequência de dígitos hexadecimais composto pelos dígitos 0, 1, ..., 9 e as letras A, B, ..., F e a, b, ..., f. Real: Uma constante literal do tipo real tem a seguinte representação: ± mantissa E expoente. A mantissa é uma sequência de dígitos com o sem ponto decimal e o expoente é um valor inteiro. A notação ’± mantissa’, onde o expoente é omitido, também é permitida. Em Pascal-XSC, para realizar a conversão de constantes literais real dentro do formato de dados internos de maneira controlada, é necessária uma notação adicional para estas constantes. Enquanto a notação de real em PASCAL implica na conversão com arredondamento para o numero de ponto-flutuante mais próximo, ela possibilita a especificação de constantes reais que são convertidas com arredondamento para o número de ponto-flutuante menor mais próximo ou para o maior mais próximo com notações ’(< ± mantissa E expoente)’ e ’(> ± mantissa E expoente)’ respectivamente. O E e o expoente podem ser omitidos mas os parênteses são obrigatórios. Boolean: Este tipo é composto pelas constantes lógicas true e false, onde false < true. Char: Estas constantes são fechadas entre aspas simples. A ordem de relação é a seguinte: ’0’ < ’1’ < ... < ’9’ e ’a’ < ’b’ < ... < ’z’. Tipos e enumeração: Este tipo consiste de constantes listadas na definição de tipos. A relação de ordem é definida pela ordem da enumeração. Um tipo de enumeração é definido pelo programador em uma definição de tipos. As constantes literais que são os elementos de uma enumeração não podem colidir com nenhum valor de outra enumeração. Subtipos: Subtipos podem ser definidos pela especificação limite inferior e do limite superior (constante ... constante). O conjunto dos valores de um subtipo consiste em todos os valores que estão entre esses limites. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 49 Dotprecision: PASCAL-XSC introduz esse novo tipo que é baseado no tipo real e permite a representação de produtos de dois números reais arbitrários e a adição de um número arbitrário de tais produtos em um formato de ponto-flutuante fixo de tamanho adequado. Se o formato real interno é fixado pela mantissa de tamanho l e os expoentes máximo (emax) e mínimo (emin) então uma variável dotprecission ocupa espaço de armazenamento da forma Figura 3.2: Tamanho de uma variável do tipo dotprecision O tamanho total é: L = g + 2emax + 2|emin| + 2l dígitos, onde g denota o número de dígitos guardados na acumulação de carga durante a adição. Valores do tipo dotprecision tipicamente ocorrem durante a multiplicação de vetores e matrizes. Os Tipos Intervalo e Complexo PASCAL-XSC provê uma aritmética adicional para os tipos complex, interval e cinterval. Eles não possuem constantes nem operadores como sua linguagem, portanto, também não há expressões. O uso de operadores e funções padrões requer o uso dos módulos aritméticos correspondentes (C_ARI, I_ARI e CI_ARI, respectivamente). O tipo complex: O número complexo z = x + iy, com x sendo a parte real e y a parte imaginária podem ser declaradas em PASCAL como: type complex = record re, im: real end; Em PASCAL-XSC, este tipo é um tipo pré-definido. A declaração da variável var z:complex; especifica uma variável complexa z. As partes real e imaginária de z podem ser acessadas por z.re e z.im, respectivamente. O tipo interval: Para intervalos reais CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 50 a = [a, a] := {x ∈ R|a ≤ x ≤ a} com a sendo o limite inferior e a o limite superior, PASCAL-XSC provê um tipo interval pré-definido, declarado da seguinte forma: type interval = record inf, sup: real end; A declaração de variável var a: interval; especifica uma variável a do tipo intervalo. Os limites superior e inferior podem ser acessados por a.inf e a.sup, respectivamente. O tipo cinterval: Intervalos complexos são retângulos com lados paralelos aos eixos no plano complexo. O tipo pré-definido cinterval é definido por: type cinterval: record re, im: interval end; As partes de um complexo intervalar c, declarado como var c: cinterval; podem ser acessados por c.re (um intervalo para a parte real) e c.im (um intervalo para a parte imaginária). Os seus limites podem ser acessados por c.re.inf, c.re.sup, c.im.inf e c.im.sup. 3.9.2 C-XSC Segundo [Hofschuster & Krämer 2010], a linguagem C-XSC7 é uma ferramenta bastante poderosa e fácil de ser manuseada. Esta linguagem tem como principal objetivo auxiliar no desenvolvimento de algoritmos numéricos que necessitam de alta precisão. As características, ou tipos, mais importantes em C-XSC são os tipos real, complexo, intervalo e complexo intervalar. A escolha da linguagem de programação C++ ao invés de C se dá pelo fato que esta segunda não ser apropriada para programar algoritmos numéricos, já que não fornece as estruturas de dados numéricas básicas como vetores e matrizes e não faz a checagem da indexação em arrays [Wiethoff 1996]. Já a linguagem C++, que é uma extensão da C 7 http://www2.math.uni-wuppertal.de/wrswt/xsc/cxsc.html CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 51 orientada à objetos, fornece várias facilidades que suprem as deficiências da C, já que agora a linguagem apresenta o conceito de classes e sobrecarga de operadores. As características básicas da C-XSC são: • Tipos de dados real (real), complexos (complex), intervalo (interval) e complexo intervalar (cinterval); • Fornece uma notação específica para manipular subarrays de vetores e matrizes tornando-os tipos dinâmicos; • Dotprecision, ou seja, tipos com precisão após a vírgula; • Maior precisão em operadores aritméticos pré-definidos; • Funções padrões de alta ocorrência; • O controle de arredondamento durante operações de entrada e saída de dados se dá pelo conceito de sobrecarga dos operadores << e >> da C++. Sendo assim, é possível especificar o número de casas decimais do valor impresso. • Fornece uma aritmética dinâmica de múltipla precisão, como o real longo (l_real) e o intervalo longo (l_interval), bem como também são implementados vetores dinâmicos correspondentes a matrizes, incluído operações vetoriais. • Fornece uma biblioteca para resolução de problemas, que nada mais é do que uma coleção de rotinas de problemas padrões para análises numéricas, com isto, garante resultados de alta precisão. Descrição dos tipos básicos C-XSC provê os tipos de dados numéricos simples como real, interval, complex e cinterval. Cada um com suas próprias aritméticas, operadores relacionais e funções aritméticas padrão. Todos os operadores aritméticos pré-definidos fornecem resultados com uma precisão de pelo menos 1 ulp(unidade na última casa decimal), desta forma é possível ter a máxima precisão na computação científica nos seus tipos. O arredondamento dos operadores aritméticos pode ser controlado usando os tipos interval e cinterval. Funções estão disponíveis para todas as combinações matematicamente úteis. Constantes literais podem ser convertidas com a máxima exatidão. Todas as funções matemáticas padrão para os tipos de dados numéricos podem ser chamados por seus nomes genéricos e fornecem resultados com garantia de alta precisão para argumentos arbitrários admissíveis. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 52 Os tipos em C-XSC são definidos da seguinte forma: Real: De acordo com [C-XSC 2010], a aritmética de C-XSC é baseada no padrão IEEE para aritmética binária de ponto-flutuante. O tipo de dados real consiste de todos os tipos de ponto-flutuante e valores especiais especificados pelo padrão para números de ponto-flutuante com mantissa de tamanho duplo. Portanto, um número do tipo real tem 64-bit, e a base b do sistema de ponto-flutuante, R = R(b, l, emin , emax ), é 2. Se o compilador de C de um computador não está conforme o padrão, o tipo real utiliza sua própria aritmética IEEE de ponto flutuante. Portanto, a introdução de um novo tipo de dados é necessário para que se tenha a portabilidade. Estrutura: Um esboço de um ponto-flutuante é observado na Figura abaixo: Figura 3.3: Formato de um ponto-flutuante O bit mais significativo o bit de sinal e é denotado por s. Se ele é um, o número de ponto-flutuante não zero é negativo, caso contrário é positivo. Os outros 63 bits são divididos entre a mantissa e o expoente. Mantissa: O tamanho da mantissa, l, de um número real contém 53 bits. O bit 53 não é explicitamente armazenado. Este valor depende da normalização ou desnormalização na representação de um ponto-flutuante. Com este tamanho de mantissa, números decimais CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 53 com um máximo de 15 dígitos fracionários podem ser representados com alta exatidão. Uma vez que um formato binário de ponto-flutuante é usado, é impossível armazenar todos os números decimais precisamente. No entanto, pode-se ter constantes decimais com arredondamento controlado dentro de uma variável do tipo real. Expoente: O expoente e de um ponto-flutuante é armazenado em um campo de 11 bits. Um valor de 1023 é subtraído do valor armazenado para obter o valor do expoente real. Isto produz emin = −1022 e emax = 1023. Convertendo para o sistema decimal −308 ≤ e ≤ 308. Complex: Este tipo é utilizado para armazenar números complexos z = x + iy ∈ C, √ onde x denota a parte real, y a parte imaginária e i denota a unidade imaginária −1. Interval: Este tipo é utilizado para representar intervalos sobre os números reais de ponto-flutuante: [a] = [a, a] = {x ∈ R|a ≤ x ≤ a ∈ R} ou seja, a representa o conjunto de todos os números fechados entro dos limites a, a ∈ R. A notação a o limite inferior e a denota o limite superior do intervalo [a]. Cinterval: Este tipo de dado é utilizado para armazenar complexos intervalares. Eles são definidos como retângulos da forma z = [x] + i[y] ∈ C, onde a parte real [x] ∈ C e a parte imaginária [y] ∈ C, com partes paralelas aos eixos no plano complexo, como indica a Figura 3.4. Figura 3.4: Complexo Intervalar [3.0,4.5] + i[1.0,2.0] Dotprecision: Os tipos dotprecision, idotprecision, cdotprecision e cidotprecision são baseados nos tipos de dados real, interval, complex e cinterval respectivamente. Variáveis destes tipos permitem a representação exata de produtos de dois números arbitrários e a CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 54 soma exata de um número arbitrário de tais produtos em um acumulador dotprecision, ou seja, em um formato de ponto fixo de tamanho adequado. Subarrays de vetores e matrizes C-XSC provê uma notação especial para manipular subarrays de vetores e matrizes. Subarrays são partes arbitrárias retangulares de arrays. Os operadores pré-definidos também podem ser usados como operadores em subarrays. Um subarray de um vetor ou matriz é acessado usando os operadores ( ) ou [ ]. O operador ( ) especifica um subarray de um objeto do mesmo tipo do objeto original. Avaliação de expressões com alta precisão Quando são avaliadas expressões aritméticas, a precisão desenvolve um papel decisivo em muitos algorítimos numéricos. Até mesmo se todos os operadores aritméticos e funções padrões sejam de precisão máxima, expressões compostas de vários operandos e funções necessariamente não fornecem resultados com precisão máxima. Então, foram desenvolvidos métodos para avaliar expressões numéricas com alta precisão e matematicamente garantida. Um tipo especial destas expressões é chamado de ’dot product expressions’, que são definidas como somas de expressões simples. Cada expressão simples possui uma variável, uma constante ou o produto simples de dois objetos. A variável pode ser do tipo escalar, vetor ou matriz. Somente os operadores matematicamente relevantes são permitidos na adição e multiplicação. O resultado de uma expressão será um escalar, vetor ou matriz. Para obter uma avaliação com precisão de 1 ulp, C-XSC fornece os tipos de dados de precisão dotprecision, cdotprecision, idotprecision e cidotprecision, citados anteriormente. Aritmética dinâmica de múltipla precisão Além das classes real e interval, em C-XSC existem classes dinâmicas de maior precisão ou reais longos (I_real) e intervalo longo (I_interval), além de vetores e matrizes dinâmicos, com toda a aritmética, operadores relacionais e funções padrões de múltiplaprecisão. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 55 Entrada e saída em C-XSC Usando o conceito de fluxo e de sobrecarga dos operadores << e >> de C++, CXSC fornece arredondamento e controle de formatação durante a Entrada/Saída (I/O) para todos os novos tipos de dados, até para os tipos dotprecision e precisão múltipla. Os parâmetros de I/O assim como no arredondamento direcionado, também usam a sobrecarga dos operadores de I/O para manipular os dados de I/O. Se um novo conjunto de parâmetros de I/O está sendo usado, as definições dos parâmetros antigos podem ser salvos numa pilha interna. Novos valores de parâmetros podem então serem definidos. Depois de usar as novas definições, as antigas podem ser restauradas da pilha. Erro de manipulação C++ fornece características intrínsecas de segurança como checagem de tipo e funções prototipadas. C-XSC dá suporte a características adicionais para segurança na programação como uma checagem do índice dos vetores e matrizes e checagem dos erros numéricos como overflow, underflow, perda de exatidão, argumentos ilegais, entre outros. C-XSC provê ao usuário várias possibilidades de modificação para manipular as reações do erro de manipulação. Biblioteca com rotinas para a resolução de problemas A biblioteca para resolução de problemas de C-XSC é uma coleção de rotinas para problemas de análises numérica padrão produzindo resultados garantidos de alta precisão. As seguintes áreas estão cobertas: • • • • • • • Avaliação de zeros de polinômios; Inversão de matrizes, sistemas lineares; Autovalores e autovetores; Transformações rápidas de Fourier; Zeros de uma equação não-linear; Sistemas de equações não-linear; Problemas de valores iniciais em equações diferenciais ordinárias. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 3.10 56 JAVA-XSC A medida que novas linguagens foram sendo desenvolvidas, surgiu a necessidade de implementação de uma ferramenta de computação numérica específica para tais linguagens. Isto em conjunto com o sucesso das linguagens XSC motivaram o desenvolvimento da JAVA-XSC8 , que é uma biblioteca baseada nas linguagens XSC. Um dos grandes atrativos em JAVA é a sua independência de plataformas e a sua grande utilização em dispositivos móveis. 3.10.1 A Linguagem de Programação JAVA Em JAVA há a presença de máquinas virtuais que são implementadas, através de software, executando programas como se fosse um computador real. Desta forma os programas JAVA são compilados, convertendo os bytecodes em código executável de máquina. Sendo assim, não há em JAVA qualquer referência específica de hardware. As principais características da linguagem JAVA são: Orientada a objetos: Tudo em JAVA pode ser tratado como um objeto. Seus programas são organizados em classes, que ao serem instanciadas produzem estes objetos. Distribuído: JAVA apresenta uma grande biblioteca de rotinas para serem utilizadas facilmente com protocolos TCP/IP como por exemplo o HTTP. Programas JAVA podem abrir e acessar objetos através da rede com a mesma facilidade que os programadores usam quando acessam um sistema de arquivo local. Compilado e interpretado: Os aplicativos em JAVA são compilados e interpretados ao mesmo tempo. Ao ser compilado é gerado um código binário, bytecode, com extensão .class, sendo então executado. Independente de arquitetura: Com a utilização da máquinas virtuais, JAVA torna seus aplicativos independentes de hardware, fazendo com que esta linguagem seja portável. 8 http://www.dimap.ufrn.br/ java-xsc CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 57 Multitarefa: JAVA pode construir aplicações com múltiplos eventos. Desta forma é possível executar diversos segmentos de códigos simultaneamente. Dinâmica: A linguagem de programação JAVA foi projetada para se adaptar ao meio envolvido. É possível fazer uma conexão com bibliotecas não nativas de forma totalmente dinâmica. Robusta: A JAVA escreve programas que são confiáveis em uma variedade de hipóteses. Ela coloca bastante ênfase no princípio de checar possíveis problemas e eliminar situações inclinadas para a ocorrência de erros. Segurança: Devido sua característica de ser distribuída, JAVA trata muito bem a questão da segurança. Ela possibilita o desenvolvimento de sistemas que estejam livres de adulterações e de vírus. Simples: JAVA é uma linguagem fácil de ser manuseada e bastante intuitiva. Foi desenvolvida de forma a ficar semelhante a C++, com o intuito de ser bem aceita no mundo do desenvolvimento OO, mas não herdando suas complexidades. Compacta: Por ocupar pouco espaço na memória, JAVA permite o desenvolvimento de aplicativos para palmtops e celulares. 3.10.2 Desenvolvimento da Biblioteca Diante de tantas vantagens, o Departamento de Informática e Matemática aplicada da Universidade Federal do Rio Grande do Norte desenvolveu uma biblioteca de suporte a computação de alta exatidão para a linguagem Java, esta foi denominada de JAVA-XSC. JAVA-XSC foi desenvolvida para trabalhar com operações intervalares e foi agrupada em módulos de acordo com a natureza de suas operações [Dutra 2000], conforme segue: Operações Básicas: Este módulo contém a definição do intervalo real e as operações aritméticas de adição, subtração, multiplicação e divisão, que servem de base a todos os demais módulos. Funções entre conjuntos: Neste módulo são apresentados métodos que tratam de CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 58 operações como intersecção, união e união convexa entre intervalos. Funções geométricas: Aqui se encontram as funções que calculam particularidades geométricas dos intervalos, como por exemplo distância, diâmetro e ponto médio. Funções elementares: São funções elementares tais como raiz quadrada, logaritmo, exponencial, entre outras. Funções trigonométricas: São funções específicas, como seno, cosseno, tangente, as hiperbólicas, entre outras. Funções de transferência e constantes: Este módulo apresenta funções que convertem reais ou inteiros em intervalos e vice-versa. Aqui também encontra-se funções que são capazes de recuperar os limites inferior e superior de um intervalo. JAVA-XSC necessitava de alguns ajustes e a criação de novos módulos que não foram desenvolvidos inicialmente, tais como módulos que venham a trabalhar com aritmética intervalar complexo e a introdução de um mecanismo de arredondamento direcionado. 3.10.3 Pacote IAMath Este pacote, Interval Arithmetic Mathematics, foi baseado na classe que trabalha com números reais em JAVA (JAVA.lang.Math). IAMath contém três classes básicas: 1 - IAException: É uma classe utilizada por alguns métodos quando há a necessidade de parar o programa caso algum erro tenha ocorrido ou em alguma situação fora do comum. 2 - RealInterval: Esta classe representa o intervalo de números reais. Ela define as estruturas do intervalo e contém as seguintes variáveis, construtores e métodos: Atributos: double lo: armazena o extremo inferior do intervalo; double hi: armazena o extremo superior do intervalo; string Err: armazena erros que ocorrem durante a execução da classe IAMath. CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 59 Construtores: RealInterval(double,double): Constrói o intervalo real a partir de duas variáveis que contém os extremos inferior e superior; RealInterval(double): Constrói um intervalo degenerado ( lo = hi), a partir de apenas uma variável. RealInterval(): Constrói um intervalo contendo como extremo inferior - infinito e + infinito. Método: Nesta classe há o método toString que imprime o intervalo com colchetes e o ponto e vírgula. IAMath: esta classe contém 52 métodos para executar operações e funções intervalares baseados no módulo I_ARI da linguagem PASCAL-XSC. 3.10.4 Modo de Arredondamento Como linguagem JAVA não provê suporte nativo ao arrendamento direcionado nas operações de ponto flutuante e a matemática intervalar necessita desse arredondamento para garantir a corretude dos resultados, em JAVA-XSC foi preciso adotar o inflacionamento nos extremos, que embora atenda o princípio da corretude, em alguns casos provoca o alargamento desnecessário dos limites do intervalo. JAVA arredonda para o número par mais próximo apesar da biblioteca JAVA-XSC necessitar dos arredondamentos para cima e para baixo para o aumento da exatidão das operações intervalares. A solução seria fazer com que JAVA pudesse dar suporte ao arredondamento direcionado. Com esta motivação surgiu a biblioteca JFloat, desenvolvida por José Frank Viana da Silva, em sua dissertação de mestrado pela Universidade Federal do Rio Grande do Norte. JFloat é uma biblioteca escrita em JAVA que implementa o padrão IEEE-754. Esta biblioteca suporta todos os modos de arredondamento exigidos pelo padrão e suas características principais são [da Silva 2007]: • Compatibilidade entre versões Java: Qualquer computador habilitado com Java pode usar a biblioteca; CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 60 • Independência de máquina: JFloat representa números em ponto-flutuante com variáveis internas, sendo assim, assegura o mesmo comportamento em qualquer plataforma; • Precisão: A versão atual trabalha somente com precisão simples; • Operações: Estão disponíveis as operações de adição, subtração, multiplicação, divisão, raiz quadrada, resto e comparação entre números; • Funções de conversão; • Disponíveis todos os modos de arredondamento: JFloat oferece todos os modos de arredondamento requeridos pelo padrão IEEE-754; • Suporte a NaN e flags de exceção; • Coleta de lixo mínima: Para evitar a limpeza de memória, as funções da biblioteca evitam alocação de objetos, o que contribui para velocidade e diminuição dos gastos de memória. O problema da ausência em JAVA de inteiros não sinalizados para a implementação de ponto flutuante de precisão simples foi sanado por JFloat. Cada variável inteira nãosinalizada (32 bits de largura) é armazenada nos bits menos significantes de uma variável inteira longa sinalizada (64 bits de largura). Os 32 bits mais significantes da variável longa sinalizada sempre é zero. Apesar disso, o problema tem sido solucionado para ponto flutuante de precisão simples, o mesmo é ainda um limitante quando se pensa em dotar a biblioteca com ponto flutuante de precisão maior que a simples. 3.11 Resumo Comparativo Como pode-se perceber na Tabela 3.7, poucas das ferramentas citadas trabalham com funções complexas intervalares. Sendo assim uma motivação para a construção do módulo complexo intervalar proposto neste trabalho. Tabela 3.6: Modos de Arredondamento Número Descrição 1 Para o mais próximo 2 Para o zero 3 Em direção ao infinito positivo 4 Em direção ao infinito negativo CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 5 Distante do zero 6 Mais próximo de x 7 Arredondamento direcionado simulado 61 Tabela 3.7: Resumo comparativo entre as ferramentas Linguagem Suporte à intervalos Suporta à complexos Modo de arredondamento CLN Não Sim 1, 3, 4 e 6 GMP Não Não 1a5 MPFR Não Não 1a5 MPFI Sim Não 3e4 MPC Não Sim 1a4 INTLIB Sim Não 7 COMMONS MATH Não Sim 1a4 PASCAL-XSC Sim Sim 1a4 C-XSC Sim Sim 1a4 JAVA-XSC Sim Não 1a4 Apesar das bibliotecas que implementam números complexos (CLN, MPC, PascalXSC e C-XSC) possuírem uma quantidade considerável de funções complexas, as mesmas não implementam funções específicas para se trabalhar com números complexos na forma polar, não apresentando assim métodos de conversão para ambas as formas, fazendo com que o módulo Complexo do JAVA-XSC se torne uma ferramenta mais completa, já que a mesma implementa métodos específicos para manusear um complexo polar além de apresentar funções de conversão. 3.12 Considerações A necessidade de resultados mais precisos está presente em todas as áreas científicas. Por este motivo surgiram inúmeros softwares que utilizam algoritmos intervalares CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 62 [Malavazi 2004], como por exemplo, Mathemática e MatLab (IntLab). Surgiram também as linguagens XSC, tais como PASCAL-XSC e C-XSC, que são linguagens que suportam intervalos e que proveem características indispensáveis para o desenvolvimento de alguns softwares numéricos e aplicações científicas. Além disso existem várias bibliotecas intervales conforme [Macedo 2004] e [de Mesquita 2004]. Este Capítulo apresentou algumas ferramentas e linguagens com suas características, tipos numéricos e modos de arredondamento implementados. No final do capítulo foi feito uma comparação entre tais ferramentas, onde pode-se observar como elas atendem a necessidade do usuário. Capítulo 4 Módulos Complexo e Complexo Intervalar 4.1 Objetivos Esta dissertação tem por objetivo desenvolver na linguagem de programação JAVA dois módulos adicionais para a ferramenta JAVA-XSC, que é na verdade uma extensão cuja característica principal é facilitar aplicações da computação científica. Algumas funçãos tiveram sua implementação baseadas na biblioteca C-XSC. Os módulos foram gerados a partir do desenvolvimento da caracterização matemática das operações e funções complexas e complexas intervalares. Foram acrescentadas novas funções complexas em JAVA-XSC não existentes na biblioteca C-XSC, como por exemplo a função de conversão da forma algébrica para polar e vice-versa. Para testar e verificar estes módulos, foi feita uma comparação entre a mesma e os resultados obtidos pela biblioteca C-XSC. Foram executados um conjunto de dados em ambas as ferramentas e a partir daí pôde-se observar a amplitude dos intervalos gerados. Existem diversas vantagens em acrescentar à JAVA uma computação de complexos e complexos intervalares. Uma característica, dentre as mais importantes, é de ser uma linguagem de programação totalmente independente de plataforma. Linguagens onde há dependência de plataforma geralmente conduzem a resultados diferentes, já que diferentes plataformas possuem diferentes precisões. Além disso, aplicativos desenvolvidos em JAVA, geralmente, ocupam pouco espaço na memória, podendo ser utilizada por dispositivos móveis, tais como celulares, palmtops, smartphones e tablets. Sendo assim, com o uso dos complexos intervalares em seu celular, um engenheiro pode realizar cálculos de um projeto diretamente em campo. CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR 4.2 64 Os Módulos Neste trabalho foram desenvolvidos dois módulos adicionais; a saber: Complex (Complexo) e Cinterval (Complexo Intervalar). As subseções a seguir irão apresentar tais módulos com suas características, variáveis, construtores e métodos. 4.2.1 Módulo Complexo Esta subseção introduz a classe Complex (código fonte em Anexo C) que representa e define a estrutura dos números complexos e apresentando suas variáveis, construtores e métodos. Um exemplo de aplicação desta classe também será visto nesta seção. Variáveis float a: armazena a parte real de um número complexo; float b: armazena a parte imaginária de um número complexo; float modulo: armazena o módulo de um número complexo; float angulo: armazena o ângulo de um número complexo; char forma: armazena a representação do número complexo, ou seja, algébrica ou polar. Construtores 1. Complex(float, float, char): Constrói um número complexo a partir da parte real (ou módulo), da parte imaginária (ou ângulo) e da sua representação (algébrica ou polar). 2. Complex(float, char): Constrói um número complexo a partir da parte real e da sua representação. Neste caso a parte imaginária é igual a zero. 3. Complex(char): Constrói um número complexo onde suas partes real (ou módulo) e imaginária (ou ângulo) são iguais a zero. CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR 65 Métodos A Tabela 4.1 apresenta todos os métodos implementados na classe Complex. Tabela 4.1: Métodos da classe Complex Método Retorno Função add Complex Calcula a soma de dois números Complexos adddown Complex Calcula a soma de dois números Complexos com arredondamento para baixo addup Complex Calcula a soma de dois números Complexos com arredondamento para cima sub Complex Calcula a subtração de dois números Complexos subdown Complex Calcula a subtração de dois números Complexos com arredondamento para baixo subup Complex Calcula a subtração de dois números Complexos com arredondamento para cima mult Complex Calcula a multiplicação de dois números Complexos multdown Complex Calcula a multiplicação de dois números Complexos com arredondamento para baixo multup Complex Calcula a multiplicação de dois números Complexos com arredondamento para cima multEscalar Complex Calcula a multiplicação de um número Complexo por um escalar div Complex Calcula a divisão de dois números Complexos divdown Complex Calcula a divisão de dois números Complexos com arredondamento para baixo divup Complex Calcula a divisão de dois números Complexos com arredondamento para cima conj Complex Calcula o conjugado de um número Complexos norma double Calcula a norma de um número Complexo modulo double Calcula o módulo de um número Complexo setRe Complex Modifica o valor da parte real de um número Complexo setIm Complex Modifica o valor da parte imaginária de um número Complexo CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR 66 seno double Calcula o seno de um número Complexo cosseno double Calcula o cosseno de um número Complexo conv Complex Converte um número Complexo da forma algébrica para a forma polar e vice-versa pot Complex Calcula a potência de um número Complexo elevado an sqrt Complex Calcula a raiz quadrada de um número Complexo log Complex Calcula o logaritmo de um número Complexo Neste módulo foram desenvolvidas funções que recebem como parâmetro complexos na forma algébrica. Após o resultado podem ser convertidas para a forma polar. A única função que recebe por parâmetro um complexo na forma polar é a função e conversão de polar para algébrica. Para instanciar um objeto do tipo Complexo é necessário informar três parâmetros. Na forma algébrica, o usuário informa a parte real, a parte imaginária e o char “a” para reforçar que o número complexo está na forma algébrica. Já se for a forma polar o usuário informa o módulo, o ângulo e o char “p” para reforçar que o número complexo está na forma polar. Por exemplo, um complexo na forma algébrica é criado da seguinte forma: 1 import ia_math . Complex ; 3 public class Testes { 5 public static void main ( String [] args ) { 7 Complex c= new Complex (5 ,7 , ’a ’); /* Instanciando o objeto */ System . out . println ("c = "+c); /* c = 5.0 + i7 .0 */ } 9 11 } Um número complexo na forma polar é criado da seguinte forma: 1 import ia_math . Complex ; 3 public class Testes { 5 public static void main ( String [] args ) { CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR Complex c= new Complex (2 ,30 , ’p ’); /* Instanciando o objeto */ System . out . println ("c = "+c); /* c = 2.0( cos 30.0 + i. sen 30.0) */ } 7 9 11 67 } 4.2.2 Módulo Complexo Intervalar Esta subseção introduz a classe Cinterval (código fonte em Anexo D) que representa e define a estrutura dos números complexos intervalares, na representação algébrica, e contém as seguintes variáveis, construtores e métodos: Variáveis RealInterval r1: armazena o intervalo contendo a parte real de um número complexo intervalar; RealInterval r2: armazena o intervalo contendo a parte imaginária de um número complexo intervalar; Construtores 1. Cinterval(RealInterval, RealInterval): Constrói um número complexo intervalar a partir de dois intervalos contendo suas partes real e imaginária. 2. Cinterval(RealInterval): Constrói um número complexo intervalar onde suas partes real e imaginária possuem o mesmo valor. 3. Cinterval (): Constrói um número complexo intervalar onde suas partes real e imaginária são iguais a zero. 4. Cinterval(Complex): Constrói um número complexo intervalar onde sua parte real é um intervalo obtido a partir da parte real de um número complexo e sua parte imaginária é um intervalo obtido a partir da parte imaginária de um número complexo. CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR 68 Métodos Na classe Cinterval temos método toString que faz o layout do número complexo colocando o símbolo “+” entre as partes real e imaginária e o símbolo “i” na parte imaginária e os colchetes para representar os intervalos. A Tabela 4.2 apresenta os métodos desenvolvidos na classe Cinterval. Tabela 4.2: Métodos da classe Cinterval Método Retorno Função add Cinterval Calcula a soma de dois números Complexos intervalares sub Cinterval Calcula a subtração de dois números Complexos intervalares mult Cinterval Calcula a multiplicação de dois números Complexos intervalares div Cinterval Calcula a divisão de dois números Complexos intervalares equals Boolean Verifica se dois Complexos intervalares são iguais ou não conj Cinterval Calcula o conjugado de um número Complexo intervalar diam Complex Calcula o diâmetro de um número Complexo intervalar mod RealInterval Calcula o módulo de um número Complexo intervalar dist double Calcula a distância entre dois números Complexos intervalares arg RealInterval Calcula o argumento de um número Complexo intervalar mid Complex Retorna um número Complexo a partir de um Complexo intervalar sqr Cinterval Calcula o quadrado de um número Complexo intervalar exp Cinterval Calcula o exponencial de um número Complexo intervalar CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR 69 power Cinterval Calcula a potência de um número Complexo intervalar elevado a n ln Cinterval Calcula o logaritmo de um número Complexo intervalar sqrt Cinterval Calcula a raiz quadrada de um número Complexo intervalar sen Cinterval Calcula o seno de um número Complexo intervalar cos Cinterval Calcula o cosseno de um número Complexo intervalar sinh Cinterval Calcula o seno hiperbólico de um número Complexo intervalar cosh Cinterval Calcula o cosseno hiperbólico de um número Complexo intervalar tan Cinterval Calcula a tangente de um número Complexo intervalar cot Cinterval Calcula a cotangente de um número Complexo intervalar tanh Cinterval Calcula a tangente hiperbólica de um número Complexo intervalar coth Cinterval Calcula a cotangente hiperbólica de um número Complexo intervalar asin Cinterval Calcula o arco seno de um número Complexo intervalar asinh Cinterval Calcula o arco seno hiperbólico de um número Complexo intervalar acos Cinterval Calcula o arco cosseno de um número Complexo intervalar acosh Cinterval Calcula o arco cosseno hiperbólico de um número Complexo intervalar atan Cinterval Calcula o arco tangente de um número Complexo intervalar acot Cinterval Calcula o arco cotangente de um número Complexo intervalar atanh Cinterval Calcula o arco tangente hiperbólico de um número Complexo intervalar CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR acoth 4.3 Cinterval 70 Calcula arco cotangente hiperbólico de um número Complexo intervalar Comparação entre C-XSC e JAVA-XSC Para realizar a comparação entre C-XSC e JAVA-XSC foi necessário executar um conjunto de dados nas duas ferramentas utilizando as mesmas entradas. Para tal foi gerado mil números complexos intervalares aleatórios (Anexo E). A partir destes números, foi executado, para cada um deles, as funções contidas em ambas as ferramentas. Na comparação foi realizado o teste T Student, que, segundo [Pocinho 2009], tem por objetivo comparar a quantidade da variabilidade devida às diferenças prevista nos resultados entre dois grupos. A Estatística T representa o tamanho da diferença entre as médias para os dois grupos, tomando em consideração a variância total. Diante disto foi utilizada a calculadora de teste T da GraphPad 1 para comparar cada intervalo gerado nas duas ferramentas. Para executar a comparação neste ferramenta é necessário informar dados em duas colunas, como ilustra a Figura 4.1. No caso desta comparação, a primeira coluna recebeu dados de C-XSC e a segunda coluna de JAVA-XSC. Ao aplicar os dados na calculadora, em quase todas as funções testadas, a ferramenta apresentou que a diferença entre as duas entradas (um intervalo de C-XSC e outro de JAVA-XSC) é considerada não estatisticamente significante, sendo assim a saída de forma geral são iguais na duas ferramentas. A única função que mostrou diferença foi a divisão. De acordo com [Lohner & Wolff 1985], existem três formas distintas de representar a divisão de um número complexo intervalar, uma delas utiliza aritimética de alta exatidão, que ainda não foi implementada em JAVA-XSC. Daí que surge tal diferença. 1 http://www.graphpad.com/quickcalcs/ttest1.cfm?Format=C CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR 71 Figura 4.1: Interface gráfica da ferramenta GraphPad 4.4 Considerações Diante da comparação feita entre as duas ferramentas utilizando o teste estatístico T Student, é possível dizer que JAVA-XSC é comparável em qualidade a uma ferramenta já consolidada, a C-XSC. Os benefícios adicionais da ferramenta em estudo, é que a mesma apresenta métodos não presentes no C-XSC, tais como as de conversão de um número complexo polar para um complexo algébrico e vice-versa. Capítulo 5 Conclusão Ao falar-se em computação numérica, a forma como os dados são processados e apresentados se torna de suma importância, daí a preocupação com a exatidão desses cálculos que é imprescindível para se obter uma solução satisfatória. Sendo assim, a matemática intervalar, é uma perfeita abordagem para assegurar tal feito, uma vez que a análise de erros já vem incluída no próprio resultado da computação. JAVA-XSC surgiu como uma alternativa a mais para o desenvolvimento e aperfeiçoamento de softwares que necessitam de um cálculo numérico mais preciso, através do uso da matemática intervalar. Esta biblioteca é composta por diversas funções que auxiliam o usuário a desenvolver aplicativos mais eficientes e precisos. Neste trabalho foram desenvolvidos e apresentados dois módulos adicionais a JAVA-XSC, ambos relacionados com os números complexos. O primeiro módulo trabalha com operações sobre os números complexos. Já no segundo módulo foi feita uma junção entre o poder computacional da matemática intervalar e os números complexos. Ao realizar uma comparação com a C-XSC, uma ferramenta já consolidada, foi possível observar que ambas retornam valores semelhantes. Sendo assim, JAVA-XSC se torna uma ferramenta computacional mais confiável. Aliando as vantagens da linguagem de programação JAVA com o valor computacional da matemática intervalar e dos números complexos, os usuários agora possuem uma ferramenta poderosa ao mesmo tempo que compacta e portável, fazendo com que aplicativos, como pro exemplo na área da engenharia, possam ser utilizados em dispositivos móveis tais como smatphones e tablets. Uma desvantagem de JAVA-XSC em relação há algumas ferramentas de cálculo nu- CAPÍTULO 5. CONCLUSÃO 73 mérico, é o uso de inteiros sinalizados da linguagem de programação JAVA. Isso faz com que a biblioteca apenas trabalhe com precisão simples, diferentemente da ferramenta GNP onde o usuário escolhe a quantidade de bits destinada a precisão dos cálculos. Outra atual desvantagem de JAVA-XSC, mais especificamente em relação a C-XSC, é que a mesma ainda não possui uma aritmética de alta exatidão. De acordo com [Úrsula Adriane Lisboa Fernandes 2001], a aritmética de alta exatidão possibilita que os cálculos sejam efetuados com máxima exatidão, sendo assim, o resultado gerado difere do valor exato no máximo em um arredondamento. Para se ter uma aritmética de alta exatidão são necessários os seguintes requisitos: • O uso de arredondamento direcionado (para baixo e para cima); • As quatro operações aritméticas (+,-,*,/) com máxima exatidão e • O produto escalar ótimo. Em conjunto com a matemática intervalar, o uso da aritmética de alta exatidão gera resultados confiáveis e com máxima exatidão, onde o resultado está contido em um intervalo cujos extremos diferem por apenas um arredondamento do valor real, pois os cálculos intermediários são feitos em registradores específicos, de forma a simular a operação nos reais, sendo o arredondamento para baixo e para cima feito apenas no final. JAVA-XSC possui os dois primeiros requisitos citados anteriormente para se obter uma aritmética de alta exatidão. Mas o terceiro ainda não foi implementado. Como etapas futuras, existe a necessidade de se elaborarem módulos que venham a trabalhar com: • • • • • Matrizes e vetores intervales; Avaliação de zeros de polinômios; Transformações rápidas de Fourier; Sistemas de equações não-linear e Produto escalar ótimo, um dos requisitos da aritmética de alta exatidão. Outra sugestão de pesquisa, é desenvolver o tipo inteiro não sinalizado em Java, desta forma seria possível reescrever a biblioteca JFloat para possuir múltiplas precisões. Uma última proposta seria o estudo da viabilidade de se implementar outras aritméticas complexas intervalares, tais como a circular e a setorial, além da implementação de outras aritméticas sobre os intervalos reais, como aritmética modal, aritmética afim e suas respectivas extensões para complexos. Referências Bibliográficas Alefeld, Gotz & Junger Herberger (1983), Introduction to Interval Computations, Academic Press, Ney York. Baumgart, John K (1969), ‘Tópicos de história da matemática para uso em sala de aula (álgebra)’, São Paulo, Editora Atual . Blomquist, F., W. Hofschuster, W. Kramer & M. Neher (2005a), ‘Complex interval functions in c-xsc’, Wissenschaftliches Rechnen/Softwaretechnologie . Blomquist, F., W. Hofschuster, W. Kramer & M. Neher (2005b), ‘Complex interval functions in c-xsc’, Wissenschaftliches Rechnen/Software Technologie . Boyer, C. (1974), ‘História da matemática’, São Paulo, Edgar Blücher . Brent, Richard P. & Paul Zimmermann (2009), ‘Modern computer arithmetic’, Creative Common . C-XSC, Team (2010), ‘Class reference’. [Online; accessed 06-Maio-2011]. URL:http://www2.math.uni-wuppertal.de/~xsc/xsc/cxsc/apidoc/html/ classcxsc_1_1real.html Candu, Yves, Tarek Raissi & Nacim Ramdani (2006), ‘Complex interval arithmetic using polar form’, Reliable Computing . Cerri, Cristina & Martha S. Monteir (2001), ‘História dos números complexo’, CAEM Centro de Aperfeiçoamento de Ensino de Matemática . da Justa Medeiros, Luiz Adauto (1972), Funções de uma Variável Complexa, Editora McGraw-Hill do Brasil e Editora da Universidade de Brasília, São Paulo, SP. da Silva, José Frank Viana (2007), Jfloat: Uma biblioteca de ponto flutuante para a linguagem java com suporte a arredondamento direcionado, Dissertação de mestrado, Universidade Federal do Rio Grande do Norte. UFRN. PPGSC, Natal, RN. 74 REFERÊNCIAS BIBLIOGRÁFICAS 75 de Mesquita, Marcos Paulo (2004), ‘Matemática intervalar: princípios e ferramentas c-xsc’. [Online; accessed 11-Abril-2011]. URL:http://www.comp.ufla.br/curso/ano2002/Matematica_intervalar_ principios_e_ferramentas_C_XSC.pdf Dias, Cláudio Carlos & Neura Maria Dantas (2006), Geometria analítica e números complexos. Funções complexas elementares, EDUFRN, Natal, RN. Dutra, José Enéas Montenegro (2000), Java-xsc: Uma biblioteca java para computações intervalares, Dissertação de mestrado, Universidade Federal do Rio Grande do Norte. UFRN. PPGSC, Natal, RN. Enge, Andreas, Mickaël Gastineau, Philippe Théveny & Paul Zimmermann (2011), ‘mpc — a library for multiprecision complex arithmetic with exact rounding’, INRIA . http://mpc.multiprecision.org/. Ezequias (1998), ‘Para que servem os números complexos?’. [Online; accessed 15Setembro-2011]. URL:http://www.profezequias.net/complexo.html Felzenszwalb, Bernardo (1979), ‘Álgebras de dimensão finita’, Rio de Janeiro, IMPA CNPq . Fousse, Laurent, Guillaume Hanrot, Vincent Lefèvre, Patrick Pélissier & Paul Zimmermann (2007), ‘Mpfr: A multiple-precision binary floating-point library with correct rounding’, ACM Trans. Math. Softw . Garrozi, Cícero & Jones Albuquerque (2009), ‘A aritmética intervalar como ferramenta para a solução de problemas de computação científica’, UFLA - Universidade Federal de Lavras . Granlund, Torbjorn & the GMP development team (2010), ‘The gnu multiple precision arithmetic library’, A GNU Manual . Haible, Bruno (2005), ‘Cln, a class library for numbers’, Manual CLN . Hanrot, Guillaume, Vincent Lefèvre, Patrick Pélissier, Philippe Théveny & Paul Zimmermann (2011), ‘Gnu mpfr: The multiple precision floating-point reliable library’, A MPFR Manual . REFERÊNCIAS BIBLIOGRÁFICAS 76 Hofschuster, Werner & Walter Krämer (2010), ‘C-xsc 2.0. library for extended scientific computing’, Bergische Universität Wuppertal, Scientific Computing/Software Engineering . Kearfott, Baker, Milind Dawande, Kaisheng Du & Chenyi Hu (1994), ‘Intlib: A portable fortran-77 elementary function library’, ACM Trans. Math. Software . Kearfott, R. (1996), ‘Rigorous global seach: Continuous problems’, Dordrecht: Kluwer Academics Publishers . Kearfott, R. Baker (1995), ‘Usage notes for intlib and fortran 90 access to it’, University of Southwestern Louisiana . Klatte, R., U. Kulish, M. Neaga, D. Ratz & Ch. Ullrich (1999), PASCAL-XSC. Language Reference with examples, Spring-Verlag, Alemanha. Lohner, R. & J. Wolff (1985), ‘Complex interval division with maximum accuracy’, Institute for Applied Mathematics, University of Karlsruhe . Lohner, R., J. Wolff & V. Gudenberg (1985), ‘Complex interval division with maximum accuracy’, Institute for Applied Mathemathics, University of Karlsruhe . Macedo, F. Wolfango (2004), ‘Análise de erros’. [Online; accessed 11-Abril-2011]. URL:http://home.utad.pt/~wmacedo/publicacoes/excerto_analise_ erros.PDF Malavazi, Mazílio Coronel (2004), ‘Aritimética intervalar: Histórico, topologia e algoritmos’, Universidade do Estado de Mato Grosso, Curso de Licenciatura Plena em Ciência da Computação . Menochi, Gisele (2004), ‘Números complexos’. [Online; accessed 05-Abril-2011]. URL:http://www.somatematica.com.br/coluna/gisele/29032004.php Moore, Ramon E. (1966), ‘Interval analysis’, Englewood Cliffs: Prentice-Hall . Muller, Jean-Michel, Nicolas Brisebarre, Florent de Dinechin, Claude-Pierre Jeannerod, Vincent Lefèvre, Guillaume Melquiond, Nathalie Revol, Damien Stehlé & Serge Torres (2009), Handbook of Floating-Point Arithmetic, Birkhäuser, Boston. Petkovic, Miodrag S. & Ljiljana D. Petkovic (1998), Complex Interval Arithmetic and Its Applications, Wiley-VCH, Berlin. REFERÊNCIAS BIBLIOGRÁFICAS 77 Revol, N. & F. Rouillier (2002), ‘Motivations for an arbitrary precision interval arithmetic and the mpfi library’, Reliable Computing pp. 23–25. Revol, Nathalie (2002), ‘Mpfi 1.0’. [Online; accessed 29-Abril-2011]. URL:http://perso.ens-lyon.fr/nathalie.revol/mpfi.html Úrsula Adriane Lisboa Fernandes (2001), Núcleo de aritmética de alta exatidão da biblioteca intervalar libavi.al, Dissertação de mestrado, Universidade Federal do Rio Grande do Sul, Curso de Pós-Graduação em Ciência da Computação, Porto Alegre. Santiago, Regivan H. Nunes, Benjamín Callejas Bedregal & Benedito Melo Acioly (2006), ‘Formal aspects of correctness and optimality of interval computations’, Formal Aspects of Computing . Santos, J. M. (2001), Em direção a uma representação para equações algébricas: uma lógica equacional local, Dissertação de mestrado, Universidade Federal do Rio Grande do Norte. UFRN. PPGSC, Natal, RN. team, The MPC (2011), ‘The multiple precision complex library’, A MPC Manual . Wiethoff, Andreas (1996), ‘C-xsc. a c++ class library for extended scientific computing’, Institut für Angewandte Mathematik. Universität Karlsruhe . Wikipedia (2008), ‘Rounding’. [Online; accessed 14-Junho-2011]. URL:http://en.wikipedia.org/wiki/Rounding#Types_of_rounding Anexo A Modos de Arredondamento Este Anexo foi baseado em [Wikipedia 2008]. Arredondamento é a forma de simplificar números, onde é feita a redução do número mas ao mesmo tempo tentando manter o seu valor aproximado. O resultado se torna menos preciso, mas por outro lado, torna-se mais fácil de ser manuseado. O arredondamento é quase inevitável em muitos cálculos, principalmente quando dividimos dois números inteiros ou quando computamos funções matemáticas, tais como raízes quadradas e logarítmos. Os erros de arredondamento se acumulam geralmente, e em certos casos mal condicionados, podem induzir um resultado sem sentido. A.1 Tipos de Arredondamento Geralmente problemas de arredondamento envolvem: • Aproximação de um número irracional para uma fração, por exemplo π para 22 7; • Aproximação de uma fração com expansão decimal periódica em uma fração decimal finita, por exemplo 53 para 1, 6667; • substituição de um número racional por uma fração de menor numerador e denominador, por exemplo, 3122/9417 para 03/01; • substituição de um número fracionário decimal por um com menos dígitos, por exemplo, 2,1784 dólares, 2,18 dólares; • substituição de um número inteiro decimal por um número inteiro, com mais zeros à direita, por exemplo, 23.217 pessoas, 23.200 pessoas, ou, em geral, • substituição de um valor por um múltiplo de um determinado montante, por exemplo, 27,2 segundo por 30 segundos (um múltiplo de 15). ANEXO A. MODOS DE ARREDONDAMENTO A.2 79 Arredondamento com o Incremento Pré-Determinado O tipo mais comum de arredondamento é arredondar para um número inteiro ou para um múltiplo inteiro de algum incremento, como o arredondamento para todo décimos de segundos, centésimos de dólar, entre outros. Em geral, o arredondamento para um número x de um múltiplo de algum m incremento especificado inclui as seguintes etapas: 1. Dividir x por m, com o resultado igual a y; 2. Arredondar y para um valor inteiro, chamando de q; 3. Multiplicar q por m para obter o valor arredondado z. z = round(x, m) = round(x/m).m Por exemplo, arredondando x = 5, 1236 centavos de reais para inteiro (ou seja para um múltiplo de 0,01) ficaria da seguinte forma: y = x/m = 5, 1236/0, 01 = 512, 36. Arredondando y para um número inteiro q = 513 e assim z = q ∗ m = 513 ∗ 0, 01 = 5, 13. O incremento m é normalmente uma fração finita. A.3 Arredondamento para Inteiro A forma mais simples de arredondamento é a substituição de um número arbitrário por um número inteiro. Todos os seguintes modos de arredondamento são implementações concretas da função round vista anteriormente. Existem diversas maneiras de arredondar um número y para um número q. As mais comuns são: • Arredondamento para baixo (ou arredondamento para o infinito negativo): q é o maior inteiro que não exceda y, ou seja, q = f loor(y) = byc = −d−ye; • Arredondamento para cima (ou arredondamento para o infinito positivo): q é o menor inteiro que não é menor que y, ou seja, q = ceil(y) = dye = −b−yc; ANEXO A. MODOS DE ARREDONDAMENTO 80 • Arredondamento para o zero: q é a parte inteira de y sem os dígitos de sua fração, ou seja, q = truncate(y) = sgn(y)b|y|c = −sgn(y)d−|y|e; • Arredondamento distante do zero: se y é um inteiro, q recebe y. Caso contrário, q é um inteiro mais proximo de zero, onde y fica entre zero e q, ou seja sgn(y)d|y|e = −sgn(y)b−|y|c; • Arredondamento para o mais próximo: q é o número inteiro mais próximo de y, seguindo algumas regras de desempate que serão vistas a seguir. Os primeiros quatro métodos são chamados de arredondamento direcionado. A.4 Regras de Desempate O arredondando um número y para o número inteiro mais próximo exige algumas regras de desempate para os casos em que y está exatamente entre dois inteiros, ou seja, quando a parte fracionária de y é exatamente 0,5, vejamos a seguir algumas destas regras: Arredondamento para cima Esta regra é amplamente utilizada. Aqui os valores de meio caminho de y são sempre arredondados para cima. Se a fração de y é exatamente 0,5, então q = y + 0, 5. q = [y + 0, 5] = −[y − 0, 5] Por exemplo, por esta regra o valor 12,5 é arredondado para 13, mas -12,5 é arredondado para -12. Se não fosse frações de 0,5, os erros introduzidos pelo método de arredondamento para o mais próximo seria simétrico: para cada fração que é arredondada para cima (como 0,328), há uma fração complementar (ou seja 0,672) que fica arredondada para baixo. Quando há arredondamento de um grande conjunto de números aleatórios com partes fracionárias, esses erros de arredondamento que estatisticamente compensam-se mutuamente e o valor (médio) esperado dos números arredondados são iguais ao valor esperado do número original. Contudo, as regras de arredondamento para cima não são simétricas. Como as frações são exatamente 0,5 obtem-se então sempre arredondamento para cima. Esta assimetria introduz um viés positivo nos erros de arredondamento. Por exemplo, se a fração de y é composto por três dígitos decimais aleatórios, então o valor esperado de q será 0,0005 ANEXO A. MODOS DE ARREDONDAMENTO 81 superior ao valor esperado de y. Por esta razão, arredondamento para o mais próximo com a regra de arredondamento para cima é também conhecida como arredondamento assimétrico. Uma das razões para arredondar usando de 0,5 é que apenas um dígito precisa ser examinado. Ao ver 17,50000, por exemplo, os três primeiros dígitos, 17.5, determina que o valor seria arredondado para 18. Se a regra oposta for usada (arredondamento para baixo), então todas as casas com zeros decimais precisariam ser examinadas para determinar se o valor é exatamente 17,5. Arredondamento para baixo Esta regra é o oposto da regra anterior. Se a fração de y é exatamente 0,5, então q = y − 0, 5. q = [y − 0, 5] = −[−y + 0, 5] Por exemplo, por esta regra o valor 12,5 é arredondado para 12, mas -12,5 é arredondado para -13. Esta regra não é simétrica, as frações que são exatamente 0,5 sempre serão arredondadas para baixo. Arredondamento longe de zero Se a fração de y é exatamente 0,5, então q = y + 0, 5 se y é positivo e q = y − 0, 5 se y é negativo. q = sgn(y)[|y| + 0, 5] = −sgn(y)[−|y| − 0, 5] Por exemplo, por esta regra o valor 12,5 é arredondado para 13, mas -12,5 é arredondado para -13. Este método trata valores positivos e negativos simetricamente. Arredondamento para zero Se a fração de y é exatamente 0,5, então q = y − 0, 5 se y é positivo e q = y + 0, 5 se y é negativo. q = sgn(y)[|y| − 0, 5] = −sgn(y)[−|y| + 0, 5] Por exemplo, por esta regra o valor 12,5 é arredondado para 12, mas -12,5 é arredondado para -12. Este método também trata valores positivos e negativos simetricamente. ANEXO A. MODOS DE ARREDONDAMENTO 82 Arredondamento para par É uma regra de desempate menos tendenciosa. Se a fração de y é exatamente 0,5, então q é o inteiro par mais próximo de y. Por exemplo, por esta regra o valor +13,5 é arredondado para +14, +12,5 é arredondado para +12, -13,5 é arredondado para -14, -12,5 é arredondado para -12. Este método também trata valores positivos e negativos simetricamente. Arredondamento para ímpar Se a fração de y é exatamente 0,5, então q é o inteiro ímpar mais próximo de y. Por exemplo, por esta regra o valor +13,5 é arredondado para +13, +12,5 é arredondado para +13, -13,5 é arredondado para -13, -12,5 é arredondado para -13. Este método também trata valores positivos e negativos simetricamente. A.5 Arredondamento Escalado Este tipo de arredondamento que é também chamado de arredondamento para uma escala logarítimica, é uma variante do arredondamento com o incremento pré-determinado, mas o incremento é modificado dependendo da escala e magnitude do resultado. A intenção é limitar o número de dígitos significantes, arredondando o valor de modo que dígitos não significantes sejam eliminados. Este tipo de arredondadamento ocorre implicitamente com números computados com valores de ponto-flutuante com pecisão limitada (como o float e double do IEEE-754), mas eles são usados mais geralmente para arredondadar alguns valores reais como números positivos de dígitos significantes e base real estritamente positiva. Este tipo de arredondamento é baseado em uma escala logaritma definida pela fixação de valor de escala real não-zero s (em casos gerais s=1), uma base fixa b>1 e um numero inteiro fixo n>0 de dígitos significantes na base. O número do principal argumento é primeiro representado em notação exponencial x = s.a.m.bc , onde o sinal s ou é +1 ou -1, a mantissa a é restrita ao intervalo semi-aberto positivo [1/b, 1) e o expoente c é um inteiro (positivo ou negativo). Se o número de ANEXO A. MODOS DE ARREDONDAMENTO 83 origem (ou número arredondado) é 0, a mantisssa a é definida como 0, o expoente c é fixado em um valor arbitrário e o sinal s pode ser escolhido arbitrariamente entre -1 e +1. A.6 Arredondamento em Ponto-Flutuante Na aritmética de ponto-flutuante, o arredondamento tem por objetivo transformar um determinado valor x em um valor z com um número específico de dígitos significantes. Em outras palavras, z será um múltiplo de um número m que depende da maginute de z. O número m é uma potência da base (usualmente 2 ou 10) da representação do ponto-flutuante. Para obter resultados onde o valor arredondado estouraria o valor de um arredondamento direcionado, é adequado utilizar ou um infinito sinalizado ou o maior número positivo representável finito (ou o menor número positivo representável finito se x é negativo), dependendo da direção do arredondamento. Em um estouro para o arredondamento para o próximo par é utilizado o infinito. Além disso, se ocorrer underflow, ou seja, se o expoente exceder o menor valor inteiro representável, o resultado efetivo pode ser zero, ou o menor número positivo finito representável finito (ou o maior número negativo finito se x é negativo). Anexo B Código Fonte da biblioteca JAVA-XSC 1 package ia_math ; 3 /* * * A classe Reallnterval representa um intervalo fechado de números reais */ public class RealInterval implements Cloneable { public double lo , hi ; public String Err ; 5 7 9 11 13 15 17 19 21 23 25 27 public RealInterval ( double lo , double hi ) { if ( lo <= hi ) { this . lo = lo ; this . hi = hi ; this . Err = ""; } else { System . out . println (" Interval ( Inferior =" + lo + " , Superior =" + hi + "):" + " incorreto o extremo Inferior <= Superior "); } } public RealInterval ( double x) { if (( Double . NEGATIVE_INFINITY < x) && (x < Double . POSITIVE_INFINITY )) { this . lo = x; this . hi = x; this . Err = ""; } else { System . out . println (" Intervalo (x): deve ser -inf <x < inf "); } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 29 } 31 /* * * construct the interval [- infty . infty ] */ public RealInterval () { this . lo = java . lang . Double . NEGATIVE_INFINITY ; this . hi = java . lang . Double . POSITIVE_INFINITY ; this . Err = ""; } 33 35 37 39 public double lo () { return this . lo ; } 41 43 public double hi () { return this . hi ; } 45 47 public String toString () { String temp = new String () ; temp = "[" + this . lo + " ; " + this . hi + "]"; return temp ; } 49 51 53 private String doubleToString ( double x) { StringBuffer s = new StringBuffer (( new Double (x)). toString () ); int i = s. length () ; int j; for (j = 1; j < 20 - i; i ++) s. append ( ’ ’); return (s. toString () ); } 55 57 59 61 public Object clone () { return new RealInterval ( this .lo , this . hi ); } 63 65 } 2 4 /* * IAException . java */ package ia_math ; 85 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 6 public class IAException extends RuntimeException { private String e; 8 public IAException () { super () ; } 10 12 public IAException ( String s) { super (s); e = s; } 14 16 public String toString () { return e; } 18 20 } 1 package ia_math ; 3 public class IAMath { /* * * BIBLIOTECA JAVA - XSC - CLASSE IA_MATH - MÉTODOS INTERVALARES * ( BASEADO NAS DESCRIÇÕES DE OPERAÇÕES E FUNÇÕES INTERVALARES ) */ 5 7 9 11 /* * * MÓDULO 1 - Operações básicas . */ 13 15 17 19 21 23 /* * * 1) Método add * Calcula a soma de Intervalos */ public static RealInterval add ( RealInterval x , RealInterval y) { RealInterval z = new RealInterval () ; z. lo = (x. lo + y. lo ); z. hi = (x. hi + y. hi ); return (z); } 25 27 /* * * 2) Método uminus 86 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 29 * * */ 87 Calcula o intervalo recíproco ou Pseudo inverso aditivo intervalar 31 33 35 37 39 41 public static RealInterval uminus ( RealInterval x) { RealInterval z = new RealInterval () ; z. lo = -x. hi ; z. hi = -x. lo ; return (z); } /* * * 3) Método sub * Calcula a subtração de Intervalos */ 43 45 47 49 51 53 public static RealInterval sub ( RealInterval x , RealInterval y) { RealInterval z = new RealInterval () ; z. lo = (x. lo - y. hi ); z. hi = (x. hi - y. lo ); return (z); } /* * * 4) Método mul * Calcula a multiplicação de Intervalos */ 55 57 59 61 63 65 67 public static RealInterval mul ( RealInterval x , RealInterval y) { RealInterval z = new RealInterval () ; if ( Math . min (( x. lo * y. lo ) , (x. lo * y. hi )) > Math . min (( x. hi * y. lo ) , (x. hi * y. hi ))) { z. lo = Math . min (( x. hi * y. lo ) , (x. hi * y. hi )); } else { z. lo = Math . min (( x. hi * y. lo ) , (x. hi * y. hi )); } if ( Math . max (( x. lo * y. lo ) , (x. lo * y. hi )) > Math . max (( x. hi * y. lo ) , (x. hi * y. hi ))) { z. hi = Math . max (( x. lo * y. lo ) , (x. lo * y. hi )); } else { z. hi = Math . max (( x. hi * y. lo ) , (x. hi * y. hi )); ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC } return (z); 69 71 } 73 /* * * 5) Método invmul * Calcula o intervalo recíproco ou * Pseudo inverso multiplicativo intervalar */ public static RealInterval invmul ( RealInterval x) { RealInterval z = new RealInterval () ; if (( x. lo <= 0.0) && (x. hi >= 0.0) ) { z. Err = " invmul : Os valores assumidos do intervalo não devem conter zero "; } else { z. lo = 1 / x. hi ; z. hi = 1 / x. lo ; } return (z); } 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 88 /* * * 6) Método sclmul * Calcula a multiplicação de um escalar * por um intervalo */ public static RealInterval sclmul ( double d , RealInterval x) { RealInterval z = new RealInterval () ; z. lo = Math . min (d * x.lo , d * x. hi ); z. hi = Math . max (d * x.lo , d * x. hi ); return z; } /* * * 7) Método mdiv * Calcula a divisão de Intervalos */ public static RealInterval div ( RealInterval x , RealInterval y) { RealInterval z = new RealInterval () ; if (( y. lo <= 0.0) && (y. hi >= 0.0) ) { z. Err = " div : A divisão não aceita um intervalo contendo zero " ; } else if ( Math . min (( x. lo / y. hi ) , (x. lo / y. lo )) > Math . min ( ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 89 (x. hi / y. hi ) , (x. hi / y. lo ))) { z. lo = Math . min (( x. hi / y. hi ) , (x. hi / y. lo )); } else { z. lo = Math . min (( x. lo / y. hi ) , (x. lo / y. lo )); } if ( Math . max (( x. lo / y. hi ) , (x. lo / y. lo )) > Math . max (( x. hi / y. hi ) , (x. hi / y. lo ))) { z. hi = Math . max (( x. lo / y. hi ) , (x. lo / y. lo )); } else { z. hi = Math . max (( x. hi / y. hi ) , (x. hi / y. lo )); } return (z); 111 113 115 117 119 121 } 123 125 /* * * MÓDULO 2 - Funções entre conjuntos . *\ 127 129 131 /** * 8) Método union * Calcula a união de intervalos */ 133 135 137 139 141 143 145 147 149 public static RealInterval union ( RealInterval x , RealInterval y) throws IAException { RealInterval z = new RealInterval () ; if (( x. hi < y. lo ) || (y. hi < x. lo )) { z. Err = " union : A intesseção é vazia !"; } else if (x. lo <= y. lo ) // se o extremo inferior x. lo for menor que o extremo inferior y . lo { z. lo = x. lo ; z. hi = Math . max (x.hi , y. hi ); } else { z. lo = y. lo ; z. hi = Math . max (x.hi , y. hi ); } return z; } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 151 153 155 157 159 161 163 165 90 /* * * 9) Método hull * União Convexa , faz concatenação de * dois intervalos */ public static RealInterval hull ( RealInterval x , RealInterval y) { RealInterval z = new RealInterval () ; z. lo = Math . min (x.lo , y. lo ); z. hi = Math . max (x.hi , y. hi ); return z; } /* * * 10) Método intersect * Calcula a interseção de intervalos */ 167 169 171 173 175 177 public static RealInterval intersect ( RealInterval x , RealInterval y) throws IAException { RealInterval z = new RealInterval () ; if ((( x. lo <= y. hi ) && (y. hi <= x. hi )) || (( y. lo <= x. hi ) && (x. hi <= y. hi ))) { z. lo = Math . max (x.lo , y. lo ); z. hi = Math . min (x.hi , y. hi ); } else z. Err = " intersect : Não há interseção !"; return z; } 179 181 /* * MÓDULO 3 - Funções geométricas . *\ 183 185 187 189 191 /** * 11) Método dist * Calcula a distância entre intervalos */ public static double dist ( RealInterval x , RealInterval y) { return ( Math . max ( Math . abs (x. lo - y. lo ) , Math . abs (x. hi - y. hi ))); } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 193 195 197 199 201 203 205 207 209 211 91 /* * * 12) Método diam * Calcula o diâmetro de um intervalos */ public static double diam ( RealInterval x) { return (x. hi - x. lo ); } /* * * 13) Método midpoint * Calcula o ponto médio de um intervalo */ public static double lmidpoint ( RealInterval x) { return (x. lo + x. hi ) / 2.0; } /* * * MÓDULO 4 - Funções elementares . *\ 213 215 217 219 221 223 225 /** * 14) Método abs * Calcula o valor absoluto de um intervalo */ public static RealInterval abs ( RealInterval x) throws IAException { RealInterval z = new RealInterval () ; if (( x. lo <= 0.0) && (x. hi >= 0.0) ) z = new RealInterval (0.0 , Math . max ( Math . abs (x. lo ) , Math . abs (x. hi ))); else z = new RealInterval ( Math . min ( Math . abs (x. lo ) , Math . abs (x. hi )) , Math . max ( Math . abs (x. lo ) , Math . abs (x. hi ))); return z; } 227 229 231 233 /* * * 15) Método sqr * Calcula o quadrado de um intervalo */ public static RealInterval sqr ( RealInterval x) { RealInterval z = new RealInterval () ; ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC if (( x. lo < 0) && (x. hi > 0) ) { z. lo = 0; z. hi = x. hi * x. hi ; } else { z. lo = Math . min (x. lo * x.lo , x. hi * x. hi ); z. hi = Math . max (x. lo * x.lo , x. hi * x. hi ); } return (z); 235 237 239 241 } 243 245 247 249 251 253 255 257 259 261 263 265 267 269 271 273 275 /* * * 16) Método sqrt * Calcula a raiz quadrada de um intervalo */ public static RealInterval sqrt ( RealInterval x) { RealInterval z = new RealInterval () ; if (x. lo < 0.0) z. Err = " sqrt : 0 intervalo não pode possuir raízes imaginárias "; z. lo = Math . sqrt (x. lo ); z. hi = Math . sqrt (x. hi ); return (z); } /* * * 17) Método exp * Calcula o exponencial de um intervalo */ public static RealInterval exp ( RealInterval x) { RealInterval z = new RealInterval () ; double hi , lo = 0; z. lo = Math . pow ( Math .E , x. lo ); z. hi = Math . pow ( Math .E , x. hi ); return z; } /* * * 18) Método exp2 * Calcula o exponencial de um intervalo * elevado a 2 */ public static RealInterval exp2 ( RealInterval x) { RealInterval z = new RealInterval () ; 92 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC double z. lo = z. hi = return 277 279 hi , lo = 0; Math . pow (2 , x. lo ); Math . pow (2 , x. hi ); z; } 281 283 285 287 289 291 293 /* * * 19) Método exp10 * Calcula o exponencial de um intervalo * elevado a 10 */ public static RealInterval exp10 ( RealInterval x) { RealInterval z = new RealInterval () ; String Erro ; double hi , lo = 0; z. lo = Math . pow (10 , x. lo ); z. hi = Math . pow (10 , x. hi ); return z; } 295 297 299 301 303 305 307 309 311 313 315 317 /* * * 20) Método power * Calcula a potência de um intervalo */ public static RealInterval power ( RealInterval x , int k) { RealInterval z = new RealInterval () ; double n = ( double ) k; if (( x. lo < 0) && (x. hi >= 0) && (n % 2 == 0) ) { z. lo = 0; z. hi = Math . max ( Math . pow ( Math . abs (x. lo ) , n) , Math . pow ( Math . abs (x. hi ) , n)); } else if (( x. hi < 0) && (n % 2 == 0) ) { z. lo = Math . min ( Math . pow ( Math . abs (x. lo ) , n) , Math . pow ( Math . abs (x. hi ) , n)); z. hi = Math . max ( Math . pow ( Math . abs (x. lo ) , n) , Math . pow ( Math . abs (x. hi ) , n)); } else { z. lo = Math . pow (x.lo , n); z. hi = Math . pow (x.hi , n); } return z; } 93 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 319 321 323 94 /* * * 21) Método ln * Calcula o logarítmo natural de um intervalo */ public static RealInterval ln ( RealInterval x) { RealInterval z = new RealInterval () ; 325 if (x. lo <= 0.0) { z. Err = " ln : 0 intervalo não pode ser menor ou igual a zero !"; } else { z. lo = Math . log (x. lo ); z. hi = Math . log (x. hi ); } return z; 327 329 331 333 } 335 /* * * 22) Método log2 * Calcula o logaritmo na base 2 de um intervalo */ public static RealInterval log2 ( RealInterval x) { RealInterval z = new RealInterval () ; RealInterval result = new RealInterval () ; z. lo = 2.0; z. hi = 2.0; 337 339 341 343 if (x. lo <= 0.0) { z. Err = " log2 : O intervalo não pode ser maior ou igual a zero " ; } else { result = div ( ln (x) , ln (z)); } return result ; 345 347 349 351 } 353 /* * * 23) Método log10 * Calcula o logaritmo na base 10 de um intervalo */ public static RealInterval log10 ( RealInterval x) { RealInterval z = new RealInterval () ; RealInterval result = new RealInterval () ; z. lo = 10.0; 355 357 359 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC z. hi = 10.0; if (x. lo <= 0.0) { z. Err = " log10 : O intervalo não pode ser menor ou igual zero "; } else { result = div ( ln (x) , ln (z)); } result = div ( ln (x) , ln (z)); return result ; 361 363 365 367 369 } 371 /* * * MÓDULO 5 - Funções trigonométricas . *\ 373 95 375 377 379 381 383 385 387 389 391 393 395 397 399 401 /** * 24) Método sin * Calcula o seno de um intervalo *\ public static RealInterval sin ( RealInterval x) { RealInterval z = new RealInterval () ; double troc , mmimM , maxM , k; // // Se x2 - xl >= 2PI , a função já passou pelos seus extremos -1 e 1 // if (( x. hi - x. lo ) > 2 * Math . PI ) { z. lo = -1; z. hi = 1; } else // // Se x2 - xl estiver entre PI e 2 PI // if (( x. hi - x. lo ) > Math . PI ) { if ( Math . sin (x. lo + (( x. hi - x. lo ) / 2) ) == 0.0) { z. lo = -1; z. hi = 1; } else if ( Math . sin (x. lo + (( x. hi - x. lo ) / 2) ) > 0.0) { // minM e 1 z. lo = Math . min ( Math . sin (x. lo ) , Math . sin (x. hi )); z. hi = 1; } else { // -1 e maxM z. lo = -1; ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 96 z. hi = Math . max ( Math . sin (x. lo ) , Math . sin (x. hi )); } } else { // // Se x2 - xl for menor que PI // k = (( int ) ((2 * (x. lo )) / Math . PI )) + 1; // se xl <= k( pi /2) <= x2 e if (( x. lo <= (k * ( Math . PI / 2) )) && (( k * ( Math . PI / 2) ) <= x . hi )) { // para algum k , tal que k -1 seja múltiplo de 4 if (( k - 1) % 4 == 0.0) { // minM e 1 z. lo = Math . min ( Math . sin (x. lo ) , Math . sin (x. hi )); z. hi = 1; } else // para algum k , tal que k +1 seja múltiplo de 4 if (( k + 1) % 4 == 0.0) { // -1 e maxM z. lo = -1; z. hi = Math . max ( Math . sin (x. lo ) , Math . sin (x. hi )); } else { // minM e maxM z. lo = Math . min ( Math . sin (x. lo ) , Math . sin (x. hi )); z. hi = Math . max ( Math . sin (x. lo ) , Math . sin (x. hi )); } } else { // minM e maxM z. lo = Math . min ( Math . sin (x. lo ) , Math . sin (x. hi )); z. hi = Math . max ( Math . sin (x. lo ) , Math . sin (x. hi )); } } return z; 403 405 407 409 411 413 415 417 419 421 423 425 427 429 } 431 433 435 437 439 441 443 /** * \ 25) Método cos * Calcula o co - seno de um intervalo */ public static RealInterval cos ( RealInterval x) { RealInterval z = new RealInterval () ; x. lo = x. lo + Math . PI / 2; x. hi = x. hi + Math . PI / 2; z = sin (x); return z; } * * ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 445 447 449 451 453 455 457 459 461 /* * * \ 26) Método tan * Calcula a tangente de um intervalo */ public static RealInterval tan ( RealInterval x) { RealInterval z = new RealInterval () ; int k1 ; if (( x. hi - x. lo ) >= Math . PI ) z. Err = " tan : Diverge , pois o intervalo não pertence ao domínimo da função "; k1 = ( int ) Math . floor (x. lo / ( Math . PI / 2) ) + 1; if (( k1 % 2 != 0) && ( k1 * Math . PI / 2 >= x. lo ) && ( k1 * Math . PI / 2 <= x. hi )) z. Err = " tan : Diverge , pois o incervalo não pertence ao dominio da funcão !"; else { z. lo = Math . tan (x. lo ); z. hi = Math . tan (x. hi ); } return z; } 463 465 467 469 471 473 475 477 479 481 /* * * 27) Método cot * Calcula a co - tangente de um intervalo */ public static RealInterval cot ( RealInterval x) { RealInterval z = new RealInterval () ; int k1 ; if (( x. hi - x. lo ) >= Math . PI ) z. Err = " cot : Diverge , pois o intervalo não pertence ao domínio da função !"; k1 = ( int ) Math . floor (x. lo / ( Math . PI )) + 1; if (( k1 * Math . PI >= x. lo ) && ( k1 * Math . PI <= x. hi )) z. Err = " cot : Diverge , pois o intervalo não pertence ao domínio da função !"; else { z. hi = (1 / Math . tan (x. lo )); z. lo = (1 / Math . tan (x. hi )); } return z; } 97 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 483 485 487 489 491 493 495 497 499 501 503 505 507 509 511 513 515 517 519 521 98 /* * * 28) Método sec * Calcula a secante de um intervalo */ public static RealInterval sec ( RealInterval x) { RealInterval z = new RealInterval () ; int k1 , k; if (( x. hi - x. lo ) >= Math . PI ) z. Err = " sec : Diverge , pois o intervalo não pertence ao domínio da função !"; k1 = ( int ) Math . floor (x. lo / ( Math . PI / 2) ) + 1; k = ( int ) Math . floor (x. lo / Math . PI ) + 1; if (( k1 % 2 != 0) && ( k1 * Math . PI / 2 >= x. lo ) && ( k1 * Math . PI / 2 <= x. hi )) z. Err = " sec : Diverge , pois o intervalo não pertence ao domínio da função !"; if (( k % 2 != 0) && (k * Math . PI >= x. lo ) && (k * Math . PI <= x. hi )) { z. lo = Math . min (1 / Math . cos (x. lo ) , 1 / Math . cos (x. hi )); z. hi = -1; } else if (( k % 2 == 0) && (k * Math . PI >= x. lo ) && (k * Math . PI <= x. hi ) && (x. lo != 0) ) { z. hi = Math . max (1 / Math . cos (x. lo ) , 1 / Math . cos (x. hi )); z. lo = 1; } else { z. hi = Math . max (1 / Math . cos (x. lo ) , 1 / Math . cos (x. hi )); z. lo = Math . min (1 / Math . cos (x. lo ) , 1 / Math . cos (x. hi )); } return (z); } /* * * 29) Método csc * Calcula a co - secante de um intervalo */ public static RealInterval csc ( RealInterval x) { RealInterval z = new RealInterval () ; x. lo = x. lo - Math . PI / 2; x. hi = x. hi - Math . PI / 2; z = sec (x); return (z); } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 523 525 527 /* * * 30) Método arcsin * Calcula o arco seno de um intervalo */ public static RealInterval arcsin ( RealInterval x) { RealInterval z = new RealInterval () ; 529 if (( x. lo < -1) || (x. hi > 1) ) { z. Err = " arcsen : Neste intervalo a função não tem inversa !"; } z. lo = Math . asin (x. lo ); z. hi = Math . asin (x. hi ); return z; 531 533 535 } 537 539 541 543 /* * * 31) Método arccos * Calcula o arco co seno de um intervalo */ public static RealInterval arccos ( RealInterval x) { RealInterval z = new RealInterval () ; if (( x. lo < -1.0) || (x. hi > 1) ) { z. Err = " arccos : Neste intervalo a função não tem inversa !"; } else { z. lo = Math . acos (x. hi ); z. hi = Math . acos (x. lo ); } return z; 545 547 549 551 } 553 563 /* * * 32) Método arcatn * Calcula o arco tangente de um intervalo */ public static RealInterval arctan ( RealInterval x) { RealInterval z = new RealInterval () ; z. lo = Math . atan (x. lo ); z. hi = Math . atan (x. hi ); return z; } 565 /* * 555 557 559 561 99 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 567 569 100 * 33) Método sinh * Calcula o seno hiperbólico de um intervalo */ public static RealInterval sinh ( RealInterval x) { RealInterval z = new RealInterval () ; 571 z. lo = ( Math . pow ( Math .E , x. lo ) - Math . pow ( Math .E , -x. lo )) / 2; z. hi = ( Math . pow ( Math .E , x. hi ) - Math . pow ( Math .E , -x. hi )) / 2; return z; 573 575 } 577 /* * * 34) Método cosh * Calcula o coseno hiperbólico de um intervalo */ public static RealInterval cosh ( RealInterval x) { RealInterval z = new RealInterval () ; double a , b; a = ( Math . pow ( Math .E , x. lo ) + Math . pow ( Math .E , -x. lo )) / 2; b = ( Math . pow ( Math .E , x. hi ) + Math . pow ( Math .E , -x. hi )) / 2; if (( x. lo <= 0) && (x. hi >= 0) ) { z. lo = 1; if ( Math . abs (x. lo ) >= x. hi ) z. hi = a; else z. hi = b; } else { z. lo = Math . min (a , b); z. hi = Math . max (a , b); } return z; } 579 581 583 585 587 589 591 593 595 597 599 601 603 605 607 /* * * 35) Método tanh * Calcula a tangente hiperbólico * de um intervalo */ public static RealInterval tanh ( RealInterval x) { RealInterval z = new RealInterval () ; x. hi = ( Math . pow ( Math .E , x. lo ) - Math . pow ( Math .E , -x. lo )) / ( Math . pow ( Math .E , z. lo ) + Math . pow ( Math .E , -x. lo )); z. lo = ( Math . pow ( Math .E , x. hi ) - Math . pow ( Math .E , -x. hi )) / ( Math . pow ( Math .E , z. hi ) + Math . pow ( Math .E , -x. hi )); ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC return z; 609 } 611 613 615 617 619 621 623 625 627 629 631 633 635 637 639 641 643 645 /* * * 36) Método coth * Calcula o co - tangente hiperbólico de um intervalo */ public static RealInterval coth ( RealInterval x) { RealInterval z = new RealInterval () ; if (( x. lo <= 0.0) && (x. hi >= 0.0) ) z. Err = " coth : O intervalo não pode conter o valor zero !"; else { z. hi = ( Math . pow ( Math .E , x. lo ) + Math . pow ( Math .E , -x. lo )) / ( Math . pow ( Math .E , x. lo ) - Math . pow ( Math .E , -x. lo )); z. lo = ( Math . pow ( Math .E , x. hi ) + Math . pow ( Math .E , -x. hi )) / ( Math . pow ( Math .E , x. hi ) - Math . pow ( Math .E , -x. hi )); } return z; } /* * * 37) Método sech * Calcula a secante hiperbólica de um intervalo */ public static RealInterval sech ( RealInterval x) { RealInterval z = new RealInterval () ; double a , b; a = 2.0 / ( Math . pow ( Math .E , x. lo ) + Math . pow ( Math .E , -x. lo )); b = 2.0 / ( Math . pow ( Math .E , x. hi ) + Math . pow ( Math .E , -x. hi )); if (( x. lo < 0) && (x. hi > 0) ) { z. hi = 1; z. lo = Math . min (a , b); } else { z. lo = Math . min (a , b); z. hi = Math . max (a , b); } return z; } 647 649 651 /* * * 38) Método csch * Calcula a co - secante hiperbólica de um intervalo */ 101 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 653 655 657 659 661 663 102 public static RealInterval csch ( RealInterval x) { RealInterval z = new RealInterval () ; double a , b; a = 2.0 / ( Math . pow ( Math .E , x. lo ) - Math . pow ( Math .E , -x. lo )); b = 2.0 / ( Math . pow ( Math .E , x. hi ) - Math . pow ( Math .E , -x. hi )); if (( x. lo < 0) && (x. hi > 0) ) z. Err = " csch : O intervalo não deve conter zero "; else { z. lo = Math . min (a , b); z. hi = Math . max (a , b); } return z; } 665 667 669 671 673 675 677 679 681 683 685 687 689 /* * * 39) Método senhI * Calcula o seno hiperbólico inverso de um intervalo */ public static RealInterval senhI ( RealInterval x) { RealInterval z = new RealInterval () ; z. lo = Math . log (x. lo + Math . sqrt ( Math . pow (x.lo , 2) + 1) ); z. hi = Math . log (x. hi + Math . sqrt ( Math . pow (x.hi , 2) + 1) ); return (z); } /* * * 40) Método coshI * Calcula o cosseno hiperbólico Inverso de um intervalo */ public static RealInterval coshI ( RealInterval x) { RealInterval z = new RealInterval () ; if (x. lo < 1) z. Err = " coshI : O intervalo [a ,b] deve satisfazer a condição a ,b >= 1"; else { z. lo = Math . log (x. lo + Math . sqrt ( Math . pow (x.lo , 2) - 1) ); z. hi = Math . log (x. hi + Math . sqrt ( Math . pow (x.hi , 2) - 1) ); } return (z); } 691 693 /* * * 41) Método tanhI ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 695 697 699 701 703 705 707 709 711 713 715 717 719 721 723 725 727 729 731 733 735 103 * Calcula a tangente hiperbólica Inverso de um intervalo */ public static RealInterval tanhI ( RealInterval x) { RealInterval z = new RealInterval () ; if ( Math . abs (x. lo ) >= 1) z. Err = " tanhI : O intervalo deve estar entre -1 e 1! "; else { z. lo = 0.5 * Math . log ((1 + x. lo ) / (1 - x. lo )); z. hi = 0.5 * Math . log ((1 + x. hi ) / (1 - x. hi )); } return (z); } /* * * 42) Método cothI * Calcula o co - tangente hiperbólico Inverso * de um intervalo */ public static RealInterval cothI ( RealInterval x) { RealInterval z = new RealInterval () ; if (( x. lo >= -1) && (x. hi <= 1) ) z. Err = " cothI : O intervalo não pode estar entre -1 e 1"; else { z. lo = 0.5 * Math . log (( x. hi + 1) / (x. hi - 1) ); z. hi = 0.5 * Math . log (( x. lo + 1) / (x. lo - 1) ); } return (z); } /* * * 43) Método sechI * Calcula o secante hiperbólico Inverso * de um intervalo */ public static RealInterval sechI ( RealInterval x) { RealInterval z = new RealInterval () ; double troc ; if (( x. lo <= 0) && (x. hi > 1) ) z. Err = " sechI = O intervalo tem que estar entre 0 e 1"; else { z. hi = Math . log ((1 + Math . sqrt (1 - Math . pow (x.lo , 2) )) / (x. lo )); z. lo = Math . log ((1 + Math . sqrt (1 - Math . pow (x.hi , 2) )) / (x. hi ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 104 )); } return (z); 737 } 739 741 743 745 747 749 751 753 755 757 759 761 /* * * 44) Método cschI * Calcula o co - secante hiperbólico Inverso * de um intervalo */ public static RealInterval cschI ( RealInterval x) { RealInterval z = new RealInterval () ; double troc ; if ((( x. lo < 0) && (x. hi > 0) ) || (( x. lo == 0) || (x. hi == 0) )) z. Err = " cschI : O intervalo não deve conter zero "; else { z. hi = Math . log (1 / x. lo + ( Math . sqrt (1 + Math . pow (x.lo , 2) ) / Math . abs (x. lo ))); z. lo = Math . log (1 / x. hi * ( Math . sqrt (1 + Math . pow (x.hi , 2) ) / Math . abs (x. hi ))); } return (z); } /* * * MÓDULO 6 - Funções de transferência e . Constantes Intervalares . *\ 763 765 767 769 771 773 /** * 45) Método int_interv * Converte um inteiro em um intervalo *\ public static RealInterval int_interv ( int i) { RealInterval z = new RealInterval () ; double x; x = ( double ) i; z = new RealInterval (x , x); return z; } 775 /** ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 777 779 781 783 * 46) Método real_interv * Converte um real em um intervalo */ public static RealInterval real_interv ( double i) { RealInterval z = new RealInterval () ; z = new RealInterval (i , i); return z; } 785 787 789 791 793 /* * * 47) Método inf * retorna o extremo inferior de um intervalo */ public static double inf ( RealInterval x) { double y; y = x. lo ; return y; } 795 797 799 801 803 /* * * 48) Método sup * retorna o extremo superior de um intervalo */ public static double sup ( RealInterval x) { double y; y = x. hi ; return y; } 805 807 809 811 813 815 817 819 /* * * 49) Método PI * Calcula o intervalo de PI */ public static RealInterval PI () { RealInterval z = new RealInterval () ; z. lo = Math . PI ; z. hi = nextfp ( Math . PI ); return (z); } /* * * 50) Método PI /n * Calcula o intervalo de PI * divido por n 105 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 821 823 825 */ public static RealInterval PI_n ( int i) { RealInterval z = new RealInterval () ; z. lo = PI () . lo / i; z. hi = PI () . hi / i; return z; } 827 829 831 833 835 837 839 841 843 845 847 849 851 853 855 857 859 861 /* * * 51) Método A * Calcula o intervalo de 1/ PI */ public static RealInterval A () { RealInterval z = new RealInterval () ; z. lo = (1.0 / PI () . hi ); z. hi = (1.0 / PI () . lo ); return (z); } /* * * 52) Método blow - retorna um novo intervalo * com o predecessordo extremo inferior e * sucessor do extremo superior de um intervalo */ public static RealInterval blow ( RealInterval x) { RealInterval z = new RealInterval () ; z. lo = prevfp (x. lo ); x. hi = nextfp (x. hi ); return z; } public static double nextfp ( double x) { double y; if (1 < Double . POSITIVE_INFINITY ) { long xx = Double . doubleToLongBits (x); if (x >= 0) y = Double . longBitsToDouble ( xx + 1) ; else if (x == 0) y = Double . longBitsToDouble (1) ; else y = Double . longBitsToDouble ( xx - 1) ; return (y); } else 106 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC return (x); 863 } 865 public static double prevfp ( double x) { if (x == 0) return (- nextfp (0.0) ); else return (- nextfp (-x)); } 867 869 871 873 } 107 Anexo C Código Fonte da Classe Complex 1 package ia_math ; import jfloat . JFloat32 ; 3 5 7 9 public class Complex { public public public public float a , b; char forma ; double modulo , angulo ; String Err ; 11 13 15 17 19 21 23 public Complex ( float a , float b , char forma ) { this . forma = forma ; if ( forma == ’a ’){ this .a = a; this .b = b; } else if ( forma == ’p ’){ this . modulo =a; this . angulo =b; } else System . out . println (" Digite a para complexo algébrico e p para complexo polar !"); } 25 27 29 public Complex ( float x , char forma ) { this . forma = forma ; if ( forma == ’a ’){ this .a = x; ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX this .b = 0; 31 } else if ( forma == ’p ’){ this . modulo =0; this . angulo =0; } 33 35 37 39 41 43 45 47 49 } public Complex ( char forma ) { this . forma = forma ; if ( forma == ’a ’){ this .a = 0; this .b = 0; } else if ( forma == ’p ’){ this . modulo =0; this . angulo =0; } else System . out . println (" Digite a para complexo algébrico e p para complexo polar !"); } 51 53 public void setForma ( char forma ){ this . forma = forma ; 55 } 57 public float Re () { return this .a; } 59 61 63 public float Im () { return this .b; } 65 67 69 71 public String toString () { String temp = new String () ; if ( this . forma == ’a ’){ if ( this .b >0) temp = this .a + " + i" + this .b; else if ( this .b <0) temp = this .a + " - i" + this .b *( -1) ; 109 ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 110 else temp = this .a+""; if ( this . modulo >0) { temp = this . modulo +"( cos "+ this . angulo +" + i. sen "+ this . angulo +")"; } 73 75 77 } else { 79 81 temp = this . modulo +"( cos "+ this . angulo +" + i. sen "+ this . angulo +")"; } return temp ; 83 85 } 87 private String doubleToString ( double x) { StringBuffer s = new StringBuffer (( new Double (x)). toString () ); int i = s. length () ; int j; for (j = 1; j < 20 - i; i ++) s. append ( ’ ’); return (s. toString () ); } 89 91 93 95 97 public Object cane () { return new Complex ( this .a , this .b , this . forma ); } 99 /* ****************************************************************\ 101 * 1) Método add * * Calcula a soma de Complexos * 103 * \***************************************************************** */ 105 107 public static Complex add ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 111 z.a=x.a+y.a; z.b=x.b+y.b; return z; 109 111 } 113 /* ****************************************************************\ * 115 * 2) Método adddown * Calcula a soma de Complexos com arredondamento para baixo * * \***************************************************************** 117 */ 125 public static Complex adddown ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_DOWN ); z.a= JFloat32 . add (x.a , y.a); z.b= JFloat32 . add (x.b , y.b); return z; } 127 /* 119 121 123 ****************************************************************\ * 129 * 3) Método addup * Calcula a soma de Complexos com arredondamento para cima * * \***************************************************************** 131 133 135 137 */ public static Complex addup ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_UP ); z.a= JFloat32 . add (x.a , y.a); z.b= JFloat32 . add (x.b , y.b); return z; ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 139 } 141 /* 112 ****************************************************************\ * 3) Método sub * 143 * Calcula a subtração de Complexos * * \***************************************************************** 145 147 149 151 */ public static Complex sub ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); z.a=x.a -y.a; z.b=x.b -y.b; return z; } 153 /* ****************************************************************\ 155 157 * 4) Método subdown * * Calcula a subtração de Complexos com arredondamento para baixo * * \***************************************************************** */ 159 161 163 165 public static Complex subdown ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_DOWN ); z.a= JFloat32 . sub (x.a , y.a); z.b= JFloat32 . sub (x.b , y.b); return z; } 167 /* ****************************************************************\ ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 169 171 113 * 5) Método subup * * Calcula a subtração de Complexos com arredondamento para baixo * * \***************************************************************** */ 173 175 177 179 public static Complex subup ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_UP ); z.a= JFloat32 . sub (x.a , y.a); z.b= JFloat32 . sub (x.b , y.b); return z; } 181 /* ****************************************************************\ 183 * 6) Método mult * * 185 Calcula a multiplicação de Complexos * * \***************************************************************** */ 187 193 public static Complex mult ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); z.a =( x.a*y.a) -(x.b*y.b); z.b =( x.a*y.b) +( x.b*y.a); return z; } 195 /* 189 191 ****************************************************************\ * 197 * 7) Método multdown * Calcula a multiplicação de Complexos com arredondamento ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX para baixo 114 * * \***************************************************************** 199 */ 207 public static Complex multdown ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_DOWN ); z.a= JFloat32 . mul (x.a , y.a) - JFloat32 . mul (x.b , y.b); z.b= JFloat32 . mul (x.a , y.b)+ JFloat32 . mul (x.b , y.a); return z; } 209 /* 201 203 205 ****************************************************************\ 211 * 8) Método multup * * Calcula a multiplicação de Complexos com arredondamento para cima * * \***************************************************************** 213 */ 221 public static Complex multup ( Complex x , Complex y){ Complex z = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_UP ); z.a= JFloat32 . mul (x.a , y.a) - JFloat32 . mul (x.b , y.b); z.b= JFloat32 . mul (x.a , y.b)+ JFloat32 . mul (x.b , y.a); return z; } 223 /* 215 217 219 ****************************************************************\ * 225 * 9) Método multEscalar * Calcula a multiplicação de um Complexo por um escalar * * \***************************************************************** ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 227 229 231 233 115 */ public static Complex multEscalar ( Complex x , float e){ Complex z = new Complex ( ’a ’); z.a= x.a * e; z.b= x.b * e; return z; } 235 /* ****************************************************************\ 237 * 10) Método conj * * 239 Calcula o conjugado de um Complexo * * \***************************************************************** */ 241 247 public static Complex conj ( Complex x){ Complex z = new Complex ( ’a ’); z.a= x.a; z.b= x.b * ( -1) ; return z; } 249 /* 243 245 ****************************************************************\ * 11) Método div * 251 * Calcula o divisão entre Complexos * * \***************************************************************** 253 255 */ public static String div ( Complex x , Complex y){ Complex dividendo = new Complex ( ’a ’); ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 116 Complex divisor = new Complex ( ’a ’); dividendo .a= (x.a*y.a) +( x.b *( y.b)); dividendo .b =( x.a*( -y.b)) +( x.b*y.a); divisor .a= (y.a*y.a) + (y.b*y.b); return dividendo + " / " + divisor ; 257 259 261 } 263 /* ****************************************************************\ 265 267 * 12) Método divdown * * Calcula o divisão entre Complexos com arredondamento para baixo * * \***************************************************************** */ 269 271 273 275 277 public static String divdown ( Complex x , Complex y){ Complex dividendo = new Complex ( ’a ’); Complex divisor = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_DOWN ); dividendo .a= JFloat32 . mul (x.a , y.a)+ JFloat32 . mul (x.b , y.b); dividendo .b= JFloat32 . mul (x.a , -y.b)+ JFloat32 . mul (x.b , y.a); divisor .a= JFloat32 . mul (y.a , y.a)+ JFloat32 . mul (y.b , y.b); return dividendo + " / " + divisor ; } 279 /* ****************************************************************\ 281 283 * 13) Método divup * * Calcula o divisão entre Complexos com arredondamento para cima * * \***************************************************************** */ 285 287 public static String divup ( Complex x , Complex y){ Complex dividendo = new Complex ( ’a ’); ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 117 Complex divisor = new Complex ( ’a ’); JFloat32 . setRoundingMode ( JFloat32 . ROUND_UP ); dividendo .a= JFloat32 . mul (x.a , y.a)+ JFloat32 . mul (x.b , y.b); dividendo .b= JFloat32 . mul (x.a , -y.b)+ JFloat32 . mul (x.b , y.a); divisor .a= JFloat32 . mul (y.a , y.a)+ JFloat32 . mul (y.b , y.b); return dividendo + " / " + divisor ; 289 291 293 } 295 /* ****************************************************************\ 297 * 14) Método norma * * Calcula a norma de um Complexos * 299 * \***************************************************************** 301 303 */ public static double norma ( Complex x){ double z = x.a*x.a + x.b*x.b; return z; } 305 /* ****************************************************************\ 307 * 14) Método modulo * * 309 Calcula o módulo de um Complexos * * \***************************************************************** 313 */ public static double modulo ( Complex x){ return Math . sqrt ( norma (x)); } 315 /* 311 ****************************************************************\ * 15) Método SetRe ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 118 * * 317 Modifica o valor da parte real de um complexo * * \***************************************************************** 323 */ public static Complex SetRe ( Complex x , float z) { x.a=z; return x; } 325 /* 319 321 ****************************************************************\ * * 327 16) Método SetIm * Modifica o valor da parte imaginária de um complexo * * \***************************************************************** 333 */ public static Complex SetIm ( Complex x , float z) { x.b=z; return x; } 335 /* 329 331 ****************************************************************\ * 18) Método cosseno * * * 337 Calculo o cosseno * \***************************************************************** 339 */ public static double cosseno ( Complex x) { 341 return x. Re () / modulo (x); 343 } ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 345 119 /* ****************************************************************\ * 19) Método seno * * * 347 Calculo o seno * \***************************************************************** 349 */ public static double seno ( Complex x) { 351 return x. Im () / modulo (x); 353 } 355 /* ****************************************************************\ * 20) Método conv * 357 * Converte da forma retangular para a polar * * \***************************************************************** 359 361 363 365 */ public static Complex conv ( Complex c) { Complex z; if (c. forma == ’a ’){ z= new Complex ( ’p ’); double p= modulo (c); z. modulo =p; 367 369 double angulo = Math . atan2 (c.b , c.a); 371 double aux = (3.141592653589793/ angulo ); 373 375 if ( angulo >0) z. angulo =180/ aux ; ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 120 377 else z. angulo =(180/ aux ) +360; 379 } else { z= new double double double 381 383 385 Complex ( ’a ’); seno =0; cosseno =0; a = Math . toRadians (c. angulo ); 387 seno = ( int ) Math . sin (a); cosseno = ( int ) Math . cos (a); 389 391 393 z.a= Float . parseFloat ( cosseno *c. modulo +""); z.b= Float . parseFloat ( seno *c. modulo +""); 395 } 397 return z; 399 } 401 403 /* ****************************************************************\ * 21) Método pot * * * 405 Potenciação * \***************************************************************** 407 */ public static Complex pot ( Complex c , int n) { 409 return Cinterval . mid ( Cinterval . power ( new Cinterval (c) ,n)); 411 } 413 /* ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 121 ****************************************************************\ * 415 21) Método sqrt * * * 417 Raiz Quadrada * \***************************************************************** 421 */ public static Complex sqrt ( Complex c) { return Cinterval . mid ( Cinterval . sqrt ( new Cinterval (c))); } 423 /* 419 ****************************************************************\ * 21) Método log * * * 425 Logaritmo * \***************************************************************** */ public static Complex log ( Complex c) { return Cinterval . mid ( Cinterval . ln ( new Cinterval (c))); } 427 429 431 433 } Anexo D Código Fonte da Classe Cinterval 1 package ia_math ; 3 5 7 9 11 13 15 /* * * A classe Cinterval representa um interva r2 fechado de números complexos */ public class Cinterval implements Cloneable { public RealInterval r1 , r2 ; public String Err ; double resxl , resxu ; static final RealInterval um = new RealInterval (1) ; static final RealInterval HALFPI = new RealInterval ( Math . PI /2) ; static final double Inf_Pi = 7074237752028440.0 / 2251799813685248.0; static final double Inf_rev_sqrt_2 = 6369051672525772.0 / 9007199254740992.0; static final double Inf_U_atan = 6243314768165359.0 / 4503599627370496.0; static final RealInterval U_atan = new RealInterval ( Inf_U_atan , Math . nextUp ( Inf_U_atan )); // optimal inclusion of 17 19 public Cinterval ( RealInterval r1 , RealInterval r2 ) { this . r1 = this . r2 = 21 23 } 25 r1 ; r2 ; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 27 29 public Cinterval () { this . r1 = new RealInterval (0) ; this . r2 = new RealInterval (0) ; } 31 public Cinterval ( Complex c) { 33 this . r1 = new RealInterval (c.a); this . r2 = new RealInterval (c.b); 35 37 39 } 41 public Cinterval ( RealInterval x) { this . r1 = x; this . r2 = x; 43 45 47 } 49 51 53 public RealInterval r1 () { return this . r2 ; } 55 57 public RealInterval r2 () { return this . r2 ; } 59 61 63 public String toString () { String temp = new String () ; temp = this . r1 + " + i" + this . r2 ; return temp ; } 65 67 69 public Object clone () { return new Cinterval ( this . r1 , this . r2 ); } 123 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 124 71 /* ****************************************************************\ 73 * 1) Método add * * 75 Calcula a soma de Intervalos COmplexos * * \***************************************************************** */ 77 83 public static Cinterval add ( Cinterval x , Cinterval y) { Cinterval z = new Cinterval () ; z. r1 = IAMath . add (x. r1 ,y. r1 ); z. r2 = IAMath . add (x. r2 ,y. r2 ) ;; return (z); } 85 /* 79 81 ****************************************************************\ * 2) Método sub * 87 * Calcula a subração de Intervalos Complexos * * \***************************************************************** 89 91 93 95 */ public static Cinterval sub ( Cinterval x , Cinterval y) { Cinterval z = new Cinterval () ; z. r1 = IAMath . sub (x. r1 ,y. r1 ); z. r2 = IAMath . sub (x. r2 ,y. r2 ) ;; return (z); } 97 /* ****************************************************************\ ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL * 99 125 3) Método mult * * Calcula a multiplicação de Intervalos Complexos * * 101 \***************************************************************** */ 103 109 public static Cinterval mult ( Cinterval x , Cinterval y) { Cinterval z = new Cinterval () ; z. r1 = IAMath . sub ( IAMath . mul (x. r1 ,y. r1 ) , IAMath . mul (x. r2 ,y. r2 )); z. r2 = IAMath . add ( IAMath . mul (x. r1 ,y. r2 ) , IAMath . mul (x. r2 ,y. r1 )); return (z); } 111 /* 105 107 ****************************************************************\ * 4) Método div * * 113 Calcula a divisao de Intervalos Complexos * * \***************************************************************** */ 115 117 119 121 public static Cinterval div ( Cinterval x , Cinterval y) { Cinterval z = new Cinterval () ; RealInterval divisor = IAMath . add ( IAMath . mul (y. r1 , y. r1 ) , IAMath . mul (y. r2 , y. r2 )); z. r1 = IAMath . div ( IAMath . add ( IAMath . mul (x. r1 ,y. r1 ) , IAMath . mul (x. r2 ,y. r2 )) , divisor ); z. r2 = IAMath . div ( IAMath . sub ( IAMath . mul (x. r2 ,y. r1 ) , IAMath . mul (x. r1 ,y. r2 )) , divisor ); return z; 123 } 125 /* ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 126 ****************************************************************\ * 127 5) Método sqr * * Calcula o quadrado de Intervalos Complexos * * 129 \***************************************************************** */ 131 133 135 137 139 141 143 145 147 public static Cinterval sqr ( Cinterval z) { RealInterval rez = z. r1 ; RealInterval reza = IAMath . abs (z. r1 ); RealInterval imz = z. r2 ; RealInterval imza = IAMath . abs (z. r2 ); double irez = reza . lo ; double srez = reza . hi ; double iimz = imza . lo ; double simz = imza . hi ; RealInterval hxl = new RealInterval ( irez ); RealInterval hxu = new RealInterval ( srez ); RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); double resxl , resxu ; resxl = IAMath . mul ( IAMath . sub (hxl , hyu ) , IAMath . add (hxl , hyu )). lo ; resxu = IAMath . mul ( IAMath . sub (hxu , hyl ) , IAMath . add (hxu , hyl )). hi ; hxl = IAMath . mul (rez , imz ); hxl = IAMath . times2pown (hxl , 1) ; return new Cinterval ( new RealInterval ( resxl , resxu ) ,hxl ); 149 151 153 } 155 /* ****************************************************************\ * 157 * 6) Método equals * Informa se dois complexos intervalares são iguais ou não * * \***************************************************************** ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 127 */ 159 167 public static boolean equals ( Cinterval x , Cinterval y) { boolean r= false ; if (( x. r1 () . hi == y. r1 () . hi ) && (x. r1 () . lo == y. r1 () . lo ) && (x. r2 () . hi == y. r2 () . hi ) && (x. r2 () . lo == y. r2 () . lo )) r= true ; return r; } 169 /* 161 163 165 ****************************************************************\ * 7) Método conj * * 171 Calcula o conjugado de um complexo intervalar * * \***************************************************************** */ 173 175 public static Cinterval conj ( Cinterval x) { Cinterval z = new Cinterval () ; z=x; z. r2 = IAMath . mulEsc (x.r2 , -1.0) ; return z; 177 179 181 } 183 /* ****************************************************************\ * 8) Método diam * 185 * Calcula o diametro de um complexo intervalar * * \***************************************************************** 187 */ ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 189 191 128 public static Complex diam ( Cinterval x) { Complex z = new Complex ( ’a ’); z.a= ( float ) IAMath . diam (x. r1 ); z.b= ( float ) IAMath . diam (x. r2 ); 193 return z; 195 } 197 /* ****************************************************************\ * 9) Método mod * 199 * Calcula o modulo de um complexo intervalar * * \***************************************************************** 201 203 205 */ public static RealInterval mod ( Cinterval x) { RealInterval a= IAMath . sqr (x. r1 ); RealInterval b= IAMath . sqr (x. r2 ); return IAMath . sqrt ( IAMath . add (a ,b)); } 207 209 /* ****************************************************************\ * 211 * 10) Método dist * Calcula a distancia entre dois complexos intervalares * * \***************************************************************** 213 215 217 219 */ public static double dist ( Cinterval x , Cinterval y) { double a= IAMath . dist (x.r1 , x. r2 ); double b= IAMath . dist (y.r1 , y. r2 ); double c=a -b; return Math . abs (c); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 221 } 223 /* 129 ****************************************************************\ * 11) Método exp * Calcula o exponencial de um número complexo intervalar * * 225 * \***************************************************************** 227 229 */ public static Cinterval exp ( Cinterval x) { RealInterval a= IAMath . exp (x. r1 ); System . out . println (a); RealInterval b= x. r2 ; return new Cinterval ( IAMath . mul (a , IAMath . cos (b)) , IAMath . mul (a , IAMath . sin (b))); 231 233 235 } 237 239 241 243 245 247 public static Cinterval power ( Cinterval z , int n ) { if ( n == 0 ) return new Cinterval ( new RealInterval (1) , new RealInterval (1) ); else if ( n == 1 ) return z; else if ( n == -1 ) return div ( new Cinterval ( new RealInterval (1) ,new RealInterval (1) ) ,z); else if ( n == 2 ) return sqr (z); else 249 { 251 253 RealInterval abs_z = mod ( z ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 130 if ( n < 0 && abs_z . lo == 0.0 ) // z contains 0 System . out . println ("z contém 0. "); if ( abs_z . hi == 0.0 ) return new Cinterval ( new RealInterval (0) , new RealInterval (0) ); else { RealInterval arg_z = arg ( z ); 255 257 259 261 RealInterval abs_z_n = IAMath . exp ( IAMath . mulEsc ( IAMath . ln ( abs_z ) ,n) ); abs_z_n . lo = Math . nextAfter ( abs_z_n .lo , Double . MIN_VALUE ); abs_z_n . hi = Math . nextUp ( abs_z_n . hi ); 263 265 267 269 return new Cinterval ( IAMath . mul ( abs_z_n , IAMath . cos ( IAMath . mulEsc ( arg_z ,n) )) , IAMath . mul ( abs_z_n , IAMath . sin ( IAMath . mulEsc ( arg_z ,n) ) )); 271 } 273 } 275 } 277 279 281 283 285 287 289 291 static double parteInteira ( double valor ) { if ( valor >= 0.0) { return Math . floor ( valor ); } else { return Math . ceil ( valor ); } } static double parteFracionaria ( double valor ) { if ( valor >= 0.0) { return valor - Math . floor ( valor ); } else { return valor - Math . ceil ( valor ); } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 293 131 } 295 297 /* ****************************************************************\ * 299 * 12) Método Ln * Calcula o logaritmo de um número complexo intervalar * * 301 \***************************************************************** 303 */ public static Cinterval Ln ( Cinterval z) { 305 307 RealInterval a = IAMath . abs (z. r1 ); 309 if ( a. lo == 0.0 && a. lo == 0.0 ) 311 System . out . println ("z contém zero "); if ( z. r1 .hi <0 && z. r2 .lo <0 && z. r2 .hi >=0 ) System . out . println (" Não permitido "); 313 return new Cinterval ( ln_sqrtx2y2 (z.r1 ,z. r2 ) ,arg (z) ); 315 } 317 /* ****************************************************************\ 319 * * 321 12) Método ln * Calcula o logaritmo de um número complexo intervalar * * \***************************************************************** 323 */ public static Cinterval ln ( Cinterval z) ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 132 { 325 RealInterval a1 = IAMath . abs (z. r1 ) ; RealInterval a2 = IAMath . abs (z. r2 ); if ( a1 . lo == 0.0 && a2 . lo == 0.0 ) { // z contains 0 System . out . println ("z contém zero "); return z; } else // return Cinterval ( ln ( abs_z_2 ) / 2.0 , arg ( z ) ); return new Cinterval ( ln_sqrtx2y2 (z.r1 ,z. r2 ) , arg (z) ); 327 329 331 333 335 337 } 339 public static RealInterval Sqrt_zpx ( RealInterval x , RealInterval y ) 341 { 343 345 347 349 int c1 = 1021; double Infx =x. lo ; double Infy =y. lo ; int ex_x = ( int ) Math . exp ( Infx ); int ex_y = ( int ) Math . exp ( Infy ); RealInterval xc = IAMath . abs (x); RealInterval yc = (y); RealInterval res ; boolean yeq0 =( Infy ==0) ; 351 353 355 357 359 361 363 365 if (( ex_x >= c1 ) || ( ex_y >= c1 )) { // To avoid overflow , scaling is necessary : IAMath . power (xc , -2) ; if ( yeq0 ) { IAMath . power (xc ,1) ; res = IAMath . sqrt ( xc ); } else { IAMath . power (yc , -2) ; res = IAMath . sqrt ( IAMath . add ( IAMath . sqrtx2y2 (xc , yc ) ,xc )); } IAMath . power (res ,1) ; // Backscaling } else // Normal calculation without scaling : if ( yeq0 ) { IAMath . power (xc ,1) ; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL res = IAMath . sqrt ( xc ); } else res = IAMath . sqrt ( IAMath . add ( IAMath . sqrtx2y2 (xc , yc ) , xc )); return res ; 367 369 } 371 public static RealInterval INV_SQRT_2 () { // optimal inclusion of 1/ sqrt (2) ; RealInterval t = new RealInterval ( Inf_rev_sqrt_2 ,0.70710678118654746171500846685377) ; return t; } 373 375 133 377 public static RealInterval Re_Sqrt_point ( RealInterval rez , RealInterval imz ) // 040626 -- 379 { double irez = rez .lo , iimz = imz . lo ; 381 383 if ( iimz == 0.0 ) { if ( irez >= 0.0 ) return IAMath . sqrt ( rez ); else return new RealInterval (0) ; } else { // iimz <> 0 if ( irez >= 0.0) return IAMath . mul ( INV_SQRT_2 () , Sqrt_zpx (rez , imz )); else return IAMath . div ( IAMath . mulEsc ( INV_SQRT_2 () , Math . abs ( iimz )) , Sqrt_zpx (rez , imz )); } 385 387 389 391 393 395 397 } 399 public static RealInterval Im_Sqrt_point ( RealInterval rez , RealInterval imz ) // 040626 -401 { 403 double ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL irez = rez .lo , iimz = imz . lo ; 405 if ( iimz == 0.0 ) { if ( irez >= 0.0 ) return new RealInterval (0) ; else return IAMath . sqrt ( IAMath . mulEsc (rez , -1) ); } else { if ( rez . lo >= 0.0 ) return IAMath . div ( IAMath . mulEsc ( INV_SQRT_2 () , iimz ) , Sqrt_zpx (rez , imz )); else { if ( iimz > 0.0 ) return IAMath . mul ( INV_SQRT_2 () , Sqrt_zpx (rez , imz )); else return IAMath . mul ( IAMath . mulEsc ( INV_SQRT_2 () , -1) , Sqrt_zpx (rez , imz )); } } 407 409 411 413 415 417 419 421 423 425 427 134 } /* ****************************************************************\ * * 429 12) Método sqrt * Calcula a raiz quadrada de um número complexo intervalar * * \***************************************************************** 431 */ public static Cinterval sqrt ( Cinterval z ) ------------------------------- 433 { 435 437 double irez = z. r1 .lo , srez = z. r1 .hi , // ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 135 iimz = z. r2 .lo , simz = z. r2 . hi ; RealInterval hxl = new RealInterval ( irez ); RealInterval hxu = new RealInterval ( srez ); RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); double resxl , resxu , resyl , resyu ; if ( irez < 0.0 && iimz < 0.0 && simz >= 0.0 ) 439 441 443 445 447 System . out . println (" z não é a raiz principal ."); if ( iimz >=0.0) { resxl = Re_Sqrt_point ( hxl , hyl ). lo ; resxu = Re_Sqrt_point ( hxu , hyu ) . hi ; 449 451 453 resyl = Im_Sqrt_point ( hxu , hyl ) . lo ; resyu = Im_Sqrt_point ( hxl , hyu ) . hi ; } else if ( simz <=0.0) { resxl = Re_Sqrt_point ( hxl , hyu ). lo ; resxu = Re_Sqrt_point ( hxu , hyl ). hi ; 455 457 459 resyl = Im_Sqrt_point ( hxl , hyl ). lo ; resyu = Im_Sqrt_point ( hxu , hyu ). hi ; } else { resxl = IAMath . sqrt ( hxl ). lo ; resxu = ( - iimz > simz ? Re_Sqrt_point ( hxu , hyl ). hi : Re_Sqrt_point ( hxu , hyu ) . hi ); resyl = Im_Sqrt_point ( hxl , hyl ). lo ; resyu = Im_Sqrt_point ( hxl , hyu ). hi ; } return new Cinterval ( new RealInterval ( resxl , resxu ) , new RealInterval ( resyl , resyu ) ); 461 463 465 467 469 471 } 473 /* ****************************************************************\ * 475 * 11) Método cos * Calcula o cosseno de um número complexo intervalar * ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 136 * \***************************************************************** 483 */ public static Cinterval cos ( Cinterval z) { RealInterval a = z. r1 ; RealInterval b = z. r2 ; return new Cinterval ( IAMath . mul ( IAMath . cos ( a ) , IAMath . cosh ( b )) , IAMath . mul ( IAMath . mulEsc ( IAMath . sin ( a ) , -1) , IAMath . sinh ( b )) ); } 485 /* 477 479 481 ****************************************************************\ * 12) Método sin * * 487 Calcula o seno de um número complexo intervalar * * \***************************************************************** 489 491 493 */ public static Cinterval sin ( Cinterval z) { RealInterval a = z. r1 ; RealInterval b = z. r2 ; return new Cinterval ( IAMath . mul ( IAMath . sin ( a ) , IAMath . cosh ( b )) , IAMath . mul ( IAMath . cos ( a ) , IAMath . sinh ( b )) ); 495 } 497 /* ****************************************************************\ 499 501 * 13) Método cosh * * Calcula o cosseno hiperbólico de um número complexo intervalar * * \***************************************************************** ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 503 505 137 */ public static Cinterval cosh ( Cinterval z) { RealInterval a = z. r1 ; RealInterval b = z. r2 ; 507 return new Cinterval ( IAMath . mul ( IAMath . cos ( b ) , IAMath . cosh ( a )) , IAMath . mul ( IAMath . sin ( b ) , IAMath . sinh ( a )) ); 509 } 511 /* ****************************************************************\ 513 * 13) Método sinh * * Calcula o cosseno hiperbólico de um número complexo intervalar * * 515 \***************************************************************** 517 519 */ public static Cinterval sinh ( Cinterval z) { RealInterval a = z. r1 ; RealInterval b = z. r2 ; 521 return new Cinterval ( IAMath . mul ( IAMath . cos ( b ) , IAMath . sinh ( a )) , IAMath . mul ( IAMath . sin ( b ) , IAMath . cosh ( a )) ); 523 } 525 527 529 public static void horizontal_check ( RealInterval hy , RealInterval cosh_2y , double irez , double srez , RealInterval hxl , RealInterval hxu , double resxl , double resxu ) 531 { 533 boolean both = false , left = false , right = false ; RealInterval zero = new RealInterval (0) ; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 535 537 539 541 138 RealInterval um = new RealInterval (1) ; if ( srez - irez > Math . PI ) // 2 intersections both = true ; else { RealInterval res_l = IAMath . sub ( IAMath . cos ( IAMath . mulEsc (hxl ,2) ) , cosh_2y ); RealInterval res_u = IAMath . sub ( IAMath . cos ( IAMath . mulEsc (hxu ,2) ) , cosh_2y ); 543 545 547 549 551 553 555 557 559 if ( IAMath . mul ( res_l , res_u ). lo > 0.0 ) // 2 intersections both = true ; else { if ( IAMath . mul ( res_l , res_u ). hi < 0.0 ) { // 1 intersection (3 intersections are PI () apart ) // neither of the intervals res_l and res_u contains zero if ( res_l . lo > 0.0 ) // " left " intersection left = true ; else // " right " intersection right = true ; } else 561 { 563 RealInterval sin_2xl = IAMath . sin ( IAMath . mulEsc (hxl ,2) ); RealInterval sin_2xu = IAMath . sin ( IAMath . mulEsc (hxu ,2) ); 565 567 569 571 573 575 if ( ! IAMath . disjoint ( zero , res_l ) ) // intersection on the left boundary { if ( sin_2xl . lo >= 0.0 ) // " left " intersection { left = true ; // remove the intersection by changing res_l ! res_l = IAMath . mulEsc (um , -1); } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 577 579 581 583 585 587 589 591 593 595 597 599 601 603 605 607 609 611 613 615 else { if ( sin_2xl . hi <= 0.0 ) // " right " intersection { right = true ; // remove the intersection by changing res_l ! res_l = um ; } else // zero is interior point of sin_2xl // if the double sine function has optimal precision , // this case should never happen both = true ; } } if ( ! IAMath . disjoint ( zero , res_u ) ) // intersection on the right boundary { if ( sin_2xu . lo >= 0.0 ) // " left " intersection { left = true ; // remove the intersection by changing res_u ! res_u = um ; } else { if ( sin_2xu . hi <= 0.0 ) // " right " intersection { right = true ; // remove the intersection by changing res_u ! res_u = IAMath . mulEsc (um , -1); } else // zero is interior point of sin_2xu // if the double sine function has optimal precision , // this case should never happen both = true ; 139 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 140 } 617 } // // finally , check if there is a second intersection // if ( IAMath . mul ( res_l , res_u ). lo < 0.0 ) both = true ; 619 621 623 } } } // // Calculate extremal values // RealInterval re_tan = IAMath . div (um , IAMath . sinh ( IAMath . mulEsc ( IAMath . abs ( hy ) ,2) )); 625 627 629 631 // " left " intersection , sin ( 2x ) > 0 if ( left || both ) { resxl = Math . min ( resxl , re_tan . hi ); resxu = Math . max ( resxu , re_tan . lo ); } 633 635 637 645 // " right " intersection , sin ( 2x ) < 0 if ( right || both ) { resxl = Math . min ( resxl , - re_tan . lo ); resxu = Math . max ( resxu , - re_tan . hi ); } } // end horizontal_check 647 /* 639 641 643 ****************************************************************\ * 649 11) Método tan * Calcula a tangente de um número complexo intervalar * * * \***************************************************************** 651 */ ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 653 141 public static Cinterval tan ( Cinterval x) { Cinterval z = new Cinterval () ; 655 657 659 RealInterval rez = x. r1 ; RealInterval imz = x. r2 ; double irez = rez . lo ; double srez = rez . hi ; double iimz = imz . hi ; 661 663 665 667 double simz = imz . hi ; RealInterval r= new RealInterval ( -1) ; RealInterval r2 = new RealInterval (1) ; RealInterval hxl = new RealInterval ( irez ); RealInterval hxu = new RealInterval ( srez ); RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); 669 double resxl , resxu , resyl , resyu ; 671 RealInterval cos_2rez = IAMath . cos ( IAMath . mulEsc (rez , 2) ); 673 RealInterval sinh_imz_2 = IAMath . sqr ( IAMath . sinh2 ( imz ) ); 675 677 679 RealInterval re_tan_l = IAMath . div (( IAMath . sin ( IAMath . mulEsc ( hxl ,2) )) , ( IAMath . mulEsc ( IAMath . add ( IAMath . sqr ( IAMath . cos ( hxl ) ) , sinh_imz_2 ) ,2 ))); RealInterval re_tan_u = IAMath . div (( IAMath . sin ( IAMath . mulEsc ( hxu ,2 ))) , ( IAMath . mulEsc ( IAMath . add ( IAMath . sqr ( IAMath . cos ( hxu ) ) , sinh_imz_2 ) ,2) )); resxl = Math . min ( re_tan_l . lo , re_tan_u . lo ); 681 683 685 687 689 691 resxu = Math . max ( re_tan_l . hi , re_tan_u . hi ) ; // // look for extremal values on horizontal boundaries // if one of the horizontal boundaries is the x - axes , // then the complex tangent is the double tangent on this // boundary , and due to monotonicity , its range // is already included in the ranges of the vertical boundaries // if ( irez < srez ) { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 142 RealInterval cosh_2yl = IAMath . div (r , IAMath . cosh ( IAMath . mulEsc (hyl ,2) )); RealInterval cosh_2yu = IAMath . div (r , IAMath . cosh ( IAMath . mulEsc (hyu ,2) )); 693 695 if ( !( IAMath . disjoint ( cos_2rez , cosh_2yl )) && iimz != 0.0 ) // extremal curve intersects lower boundary horizontal_check ( hyl , cosh_2yl , irez , srez , hxl , hxu , resxl , resxu ); 697 699 if (!( IAMath . disjoint ( cos_2rez , cosh_2yu )) && simz != 0.0 ) // extremal curve intersects upper boundary horizontal_check ( hyu , cosh_2yu , irez , srez , hxl , hxu , resxl , resxu ); 701 703 705 707 709 711 } // // 3 rd : imaginary part // // evaluate tan on horizontal boundaries // RealInterval cos_rez_2 = IAMath . sqr ( IAMath . cos ( rez ) ); RealInterval im_tan_l = IAMath . div ( IAMath . sinh ( IAMath . mulEsc ( hyl ,2) ) , ( IAMath . mulEsc (( IAMath . add ( cos_rez_2 , IAMath . sqr ( IAMath . sinh ( hyl ) ) )) ,2) )); RealInterval im_tan_u = IAMath . div ( IAMath . sinh ( IAMath . mulEsc ( hyu ,2) ) , ( IAMath . mulEsc (( IAMath . add ( cos_rez_2 , IAMath . sqr ( IAMath . sinh ( hyu ) ) )) ,2) )); 713 715 resyl = Math . min ( im_tan_l .lo , im_tan_u . lo ); resyu = Math . max ( im_tan_l .hi , im_tan_u . hi ); 717 719 721 723 725 // // // // // look for extremal values on vertical boundaries here , the situation is simpler than for the double part if 2 intersections with extremal curves appear , one lies in the lower half plane , the other in the upper half plane // RealInterval cos_2xl = IAMath . cos ( IAMath . mulEsc (hxl ,2) ); RealInterval cos_2xu = IAMath . cos ( IAMath . mulEsc (hxu ,2) ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 143 RealInterval im_tan ; 727 729 if ( iimz < 0.0 ) // intersection in lower half plane ? { 731 RealInterval imz_h = new RealInterval ( iimz , Math . min ( simz , 0.0 ) ); 733 RealInterval cosh_2imz = IAMath . div (r , IAMath . cosh ( IAMath . mulEsc ( imz_h ,2) )); 735 737 739 741 743 745 747 749 751 753 755 757 if ( ( ! IAMath . disjoint ( cosh_2imz , cos_2xl ) ) ) // extremal curve intersects left boundary // in this case , sin ( 2 * xl ) <> 0.0 ( no poles { im_tan = IAMath . div (r , IAMath . abs ( IAMath . sin ( (hxl ,2) ) )); resyl = Math . min ( resyl , im_tan . lo ); resyu = Math . max ( resyu , im_tan . hi ); } if ( ( ! IAMath . disjoint ( cosh_2imz , cos_2xu ) ) ) // extremal curve intersects right boundary // in this case , sin ( 2 * xu ) <> 0.0 ( no poles { im_tan = IAMath . div (r , IAMath . abs ( IAMath . sin ( (hxu ,2) ) )); resyl = Math . min ( resyl , im_tan . lo ); resyu = Math . max ( resyu , im_tan . hi ); } here !) IAMath . mulEsc here !) IAMath . mulEsc } if ( simz > 0.0 ) // intersection in upper half plane ? { RealInterval simz ); imz_h = new RealInterval ( Math . max ( iimz , 0.0 ) , 759 RealInterval cosh_2imz = IAMath . div (r , IAMath . cosh ( IAMath . mulEsc ( imz_h ,2) ) ); 761 if ( ( ! IAMath . disjoint ( cosh_2imz , cos_2xl ) ) ) ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 144 // extremal curve intersects left boundary // in this case , sin ( 2 * xl ) <> 0.0 ( no poles here !) 763 { 765 im_tan = IAMath . div (r2 , IAMath . abs ( IAMath . sin ( IAMath . mulEsc (hxl ,2) )) ); resyl = Math . min ( resyl , im_tan . lo ); resyu = Math . max ( resyu , im_tan . hi ); 767 } if ( ( ! IAMath . disjoint ( cosh_2imz , cos_2xu ) ) ) // extremal curve intersects right boundary // in this case , sin ( 2 * xu ) <> 0.0 ( no poles here !) { im_tan = IAMath . div (r2 , IAMath . abs ( IAMath . sin ( IAMath . mulEsc (hxu ,2) )) ); resyl = Math . min ( resyl , im_tan . lo ); resyu = Math . max ( resyu , im_tan . hi ); } 769 771 773 775 777 } 779 z. r1 = new RealInterval ( resxl , resxu ); z. r2 = new RealInterval ( resyl , resyu ); 781 783 return z; 785 } /* ****************************************************************\ 787 * * 789 12) Método cot * Calcula a cotangente de um número complexo intervalar * * \***************************************************************** 791 793 */ public static Cinterval cot ( Cinterval z ) { RealInterval r = new RealInterval ( Math . PI /2) ; Cinterval c1 = new Cinterval (r); 795 797 Cinterval c = tan ( sub (c1 ,z)); return c; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 145 } 799 /* ****************************************************************\ 801 803 * 13) Método tanh * * Calcula a tangente hiperbólica de um número complexo intervalar * * \***************************************************************** 809 */ public static Cinterval tanh ( Cinterval z ) { Cinterval res = tan ( new Cinterval ( z.r1 , z. r2 ) ); return new Cinterval ( res .r1 , res . r2 ); } 811 /* 805 807 ****************************************************************\ 813 * 14) Método coth * * Calcula a cotangente hiperbólica de um número complexo intervalar * * \***************************************************************** 821 */ public static Cinterval coth ( Cinterval z ) { // coth ( z ) = i * cot ( i * z ); Cinterval zh = new Cinterval ( IAMath . mulEsc (z.r1 , -1) , z. r2 ); // zh = i*z; Cinterval res = cot ( zh ); return ( new Cinterval ( IAMath . mulEsc ( res .r1 , -1) ,res . r2 ) ); } 823 /* 815 817 819 ****************************************************************\ * 14) Método Atan * ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL * 825 146 Calcula o arco - tangente de um número complexo intervalar * * \***************************************************************** 827 829 831 833 835 837 */ public static RealInterval Atan ( RealInterval y , RealInterval x ) { // coth ( z ) = i * cot ( i * z ); int c = 54; double Infx =( x. lo ) , Infy =( y. lo ); int ex_x =( int )( Math . getExponent ( Infx ) +1) , ex_y =( int )( Math . getExponent ( Infy ) +1) , signx =( int )( Math . signum ( Infx )) , signy =( int )( Math . signum ( Infy )) , signq ; RealInterval res = new RealInterval (0) ; 839 if ( signy !=0) { signq = signx * signy ; if ( ex_y - ex_x > c) res = signq >0 ? HALFPI : IAMath . mulEsc ( HALFPI , -1) ; else res = IAMath . arctan ( IAMath . div (y ,x)); } 841 843 845 return res ; 847 } 849 /* ****************************************************************\ 851 * * 853 14) Método Atan * Calcula o arco - tangente de um número complexo intervalar * * \***************************************************************** 855 857 */ public static RealInterval Atan ( RealInterval y , double x ) { return Atan (y , new RealInterval (x)); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 147 } 859 861 /* ****************************************************************\ * * 863 14) Método Arg * Calcula o argumento de um número complexo intervalar * * \***************************************************************** 865 */ public static RealInterval Arg ( Cinterval z) 867 { 869 871 873 875 877 double srez = z. r1 .hi , irez = z. r1 .lo , simz = z. r2 .hi , iimz = z. r2 . lo ; RealInterval RealInterval RealInterval RealInterval hxl = new RealInterval ( irez ); hxu = new RealInterval ( srez ); hyl = new RealInterval ( iimz ); hyu = new RealInterval ( simz ); 879 double resl , resu ; 881 883 885 887 889 891 if ( iimz > 0.0 ) // case I: Im (z) > 0 { resl = ( srez > 0.0 ? Atan ( hyl , hxu Atan ( hyu , hxu ). lo + Math . PI : resu = ( irez > 0.0 ? Atan ( hyu , hxl Atan ( hyl , hxl ). hi + Math . PI : return new RealInterval ( resl , resu } else { if ( simz < 0.0 ) // case II : Im (z) < 0 ). lo : ( HALFPI . lo ). hi : ( HALFPI . hi ); srez < 0.0 ? ) ); irez < 0.0 ? ) ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 893 895 897 899 901 903 905 907 909 911 913 915 917 919 921 923 925 927 929 931 148 { resl = > resu = > return ( irez < 0.0 ? Atan ( hyu , hxl ). lo - Math . PI : ( irez 0.0 ? Atan ( hyl , hxl ). lo : - HALFPI . lo ) ); ( srez < 0.0 ? Atan ( hyl , hxu ). hi - Math . PI : ( srez 0.0 ? Atan ( hyu , hxu ). hi : - HALFPI . lo ) ); new RealInterval ( resl , resu ); } else // 0 in Im (z) { if ( irez > 0.0 ) // case III : Re (z) > 0 // z contains positive double values { resl = ( iimz < 0.0 ? Atan ( hyl , hxl ). hi : 0.0 ); return new RealInterval ( resl , Atan ( hyu , hxl ). hi ); } else // z contains nonpositive double numbers { if ( irez < 0.0 ) { // case IV : z contains negative double numbers System . out . println ("z contém números negativos "); return new RealInterval (0.0) ; } else // case V: 0 in z , but z doesn ’t contain negative double numbers { if ( srez > 0.0 ) // diam ( Re (z) > 0.0 ) { resl = ( iimz < 0.0 ? - HALFPI . hi : 0.0 ); resu = ( simz > 0.0 ? HALFPI . hi : 0.0 ); return new RealInterval ( resl , resu ); } else // Re (z) == 0.0 { if ( iimz == 0.0 && simz == 0.0 ) // Z == 0 return new RealInterval (0) ; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 149 else { resl = ( iimz < 0.0 ? - HALFPI . hi : HALFPI . lo ); resu = ( simz > 0.0 ? HALFPI . hi : - HALFPI . lo ); return new RealInterval ( resl , resu ); } 933 935 937 } 939 } } 941 } } 943 945 } 947 /* ****************************************************************\ 949 * * 951 14) Método arg * Calcula o argumento de um número complexo intervalar * * \***************************************************************** 953 955 957 */ public static RealInterval arg ( Cinterval z) { double srez = z. r1 . hi ; double irez = z. r1 . lo ; double simz = z. r2 . hi ; double iimz = z. r2 . lo ; 959 double resl , resu ; 961 963 965 967 969 if ( irez < 0.0 && iimz <= 0.0 && simz >= 0.0 ) // z contains negative real values { if ( srez > 0.0 ) // 0 in z and 0 interior point of Re (z) { resl = ( iimz < 0.0 ? - Math . PI : 0.0 ); resu = ( ( iimz < 0.0 && simz == 0.0 ) ? 0.0 : Math . PI ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 150 return new RealInterval ( resl , resu ); } else { // srez <= 0.0 if ( iimz == simz ) // z is real interval containing no positive values return new RealInterval ( Math . PI ); else // sup ( Re (z) ) <= 0, diam ( Im (z) ) > 0 { if ( srez == 0.0 ) { resl = ( simz > 0.0 ? Math . PI /2 : - Math . PI ); resu = ( iimz < 0.0 ? ( simz > 0.0 ? IAMath . mulEsc ( HALFPI ,3 ). hi : - HALFPI . hi ) : Math . PI ); return new RealInterval ( resl , resu ); } else // sup ( Re (z) ) < 0, diam ( Im (z) ) > 0 { RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); resl = ( simz > 0.0 ? IAMath . add ( Atan ( hyu , srez ) , new RealInterval ( Math . PI )). lo : - Math . PI ); resu = ( iimz < 0.0 ? ( simz > 0.0 ? IAMath . add ( Atan ( hyl , srez ) , new RealInterval ( Math . PI ) ). hi : IAMath . sub ( Atan ( hyl , srez ) , new RealInterval ( Math . PI )). hi ) : Math . PI ); return new RealInterval ( resl , resu ); } } } } else // Arg (z) is well - defined return Arg ( z ); 971 973 975 977 979 981 983 985 987 989 991 993 995 997 999 1001 } 1003 1005 1007 public static RealInterval ln_sqrtx2y2 ( RealInterval x , RealInterval y){ RealInterval ad = IAMath . add ( IAMath . sqr (x) , IAMath . sqr (y)); RealInterval log = IAMath . ln ( ad ); return IAMath . mulEsc (log ,0.5) ; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 1009 } 1011 public static Cinterval sqrtp1m1 ( Cinterval z) 1013 { 151 double c = 1.5; Cinterval res ; RealInterval absz = mod (z); double Sup_absz =( absz . hi ); 1015 1017 if ( Sup_absz < c) res = div (z , ( add ( sqrt ( add (z , new Cinterval ( new RealInterval (1) , new RealInterval (1) ))) ,new Cinterval ( new RealInterval (1) , new RealInterval (1) )))); else res = sub ( sqrt ( add (z , new Cinterval ( new RealInterval (1) , new RealInterval (1) ))) , new Cinterval ( new RealInterval (1) , new RealInterval (1) )); return res ; 1019 1021 1023 } 1025 public static Cinterval sqrt1mx2 ( Cinterval z) 1027 { 1029 1031 double c = 5 e8 ; Cinterval res ,u; RealInterval absz =( mod (z)); double Inf_absz =( absz . lo ); 1033 1035 1037 1039 1041 1043 if ( Inf_absz > c) { absz = IAMath . div ( new RealInterval (1) , new RealInterval ( Inf_absz )); Inf_absz = absz . hi ; res = new Cinterval ( new RealInterval (- Inf_absz , Inf_absz ) , new RealInterval (- Inf_absz , Inf_absz )); // res = Delta u = new Cinterval ( IAMath . mulEsc (z.r2 , -1) ,z. r1 ); // u = i*z ; // res is the correcture interval , i.e. // i*z + res or -i*z + res is the inclusion of sqrt {1 -z ^2} res = (z. r2 .lo >=0) ? add ( mult (u , new Cinterval ( new RealInterval ( -1) , new RealInterval ( -1) )) , res ) : add ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 152 (u ,res ); } else { res = sub ( new Cinterval ( new RealInterval (1) , new RealInterval (1) ) ,z); u = add ( new Cinterval ( new RealInterval (1) , new RealInterval (1) ) ,z); res = ( mod ( res ).hi <0.5 || mod (u).hi <0.5) ? sqrt ( mult (res ,u)) : sqrt ( sub ( new Cinterval ( new RealInterval (1) ,new RealInterval (1) ) ,sqr (z))); } if ( res . r1 .lo <0) res = new Cinterval ( new RealInterval (0.0 , res . r1 . hi ) , res . r2 ) ; 1045 1047 1049 1051 1053 return res ; 1055 } 1057 1059 1061 1063 1065 1067 public static RealInterval f_aux_asin ( RealInterval x , RealInterval y ) // f_aux_asin (z) = ( |z +1| + |z -1| ) / 2 { RealInterval um = new RealInterval (1) ; RealInterval res ; if (y. lo ==0 && y. hi ==0 && IAMath . abs (x). lo == 1.0 && IAMath . abs ( x). hi == 1.0) res = new RealInterval (1.0) ; else { res = IAMath . div ( IAMath . add ( IAMath . sqrtx2y2 ( IAMath . add (x , um ) ,y) , IAMath . sqrtx2y2 ( IAMath . sub (x , um ) ,y)) ,new RealInterval (2) ); 1069 1071 1073 1075 } if ( res . hi == java . lang . Double . POSITIVE_INFINITY ) // Blomquist : program stop , if overflow occurs . { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL System . out . println (" 153 z fora de alcance "); 1077 } double hlb = Math . max ( 1.0 , Math . abs ( x. hi ) ); if ( res . lo < hlb ) // invalid overestimation ! res = new RealInterval ( hlb , res . hi ); 1079 1081 1083 return res ; 1085 } 1087 1089 1091 1093 1095 1097 1099 1101 1103 1105 1107 1109 1111 1113 public static RealInterval f_aux_asin_Vn ( RealInterval x , RealInterval y) { // normal calculation of V; RealInterval V ,f1 , f2 ; f1 = IAMath . add (x , new RealInterval (1.0) ); f2 = IAMath . add (x , new RealInterval ( -1.0) ); V = IAMath . add ( IAMath . mul ( IAMath . abs ( f1 ) , IAMath . sqrtp1m1 ( IAMath . sqr ( IAMath . div (y , f1 )))) , IAMath . mul ( IAMath . abs ( f2 ) , IAMath . sqrtp1m1 ( IAMath . sqr ( IAMath . div (y , f2 ))))); V= IAMath . times2pown (V , -1) ; return V; } // f_aux_asin_Vn public static RealInterval ACOSH_p1 ( RealInterval x , RealInterval y ) { // Calculating an inclusion for acosh (1+ V /2) if |x | <1; int p = -80; double r1 =y. lo ; double t; int ex = ( int ) Math . getExponent ( r1 ) +1; RealInterval res = new RealInterval (0.0) ,u ,V; if (ex > -2000 && ex <= -80) { u = IAMath . div ( IAMath . abs (y) , IAMath . sqrt1mx2 (x)); t = u. lo ; res = new RealInterval (t ,u. hi ); } else if (ex >p) { V = f_aux_asin_Vn (x ,y); // usual calculation ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 154 res = IAMath . acoshp1 (V); 1115 1117 } return res ; } // ACOSH_p1 1119 1121 1123 1125 1127 1129 public static RealInterval ACOSH_f_aux ( RealInterval x , RealInterval y ) // Calculating acosh ( f_aux_asin (x ,y) ); x ,y: point intervals !! { RealInterval res , delta ; double rx = Math . abs (x. lo ); double ry = Math . abs (y. lo ); if (rx >2.0 || ry >2.0) { res = IAMath . coshI ( f_aux_asin (x ,y) ); // as before ! 1131 1133 1135 1137 } else { if ( rx == 1.0) { delta = IAMath . abs (y); 1139 if ( Math . getExponent ( delta . lo ) +1 <= -50) { 1141 1143 1145 res = IAMath . sqrt ( delta ); rx = res . hi ; if (rx >0) res = new RealInterval ( Math . nextAfter ( res .lo , Double . MIN_VALUE ) , Math . nextUp ( rx )); } else { 1147 1149 1151 RealInterval aux = IAMath . div ( IAMath . abs (y) , new RealInterval (2) ); // delta : |y |/2; delta = IAMath . add ( IAMath . sqrtp1m1 ( IAMath . sqr ( aux )) , aux ) ; res = IAMath . acoshp1 ( delta ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 155 1153 } } else if (rx <1.0) res = ACOSH_p1 (x ,y); else res = IAMath . acoshp1 ( IAMath . add (( IAMath . sub ( IAMath . abs (x) ,new RealInterval (1.0) )) , f_aux_asin_Vn (x ,y) )); 1155 1157 1159 1161 } return res ; } // ACOSH_f_aux 1163 public static RealInterval Asin_beta ( RealInterval x , RealInterval y ) 1165 { 1167 1169 double c1 = 0.75; boolean neg_b ; double Infxa ; RealInterval res , beta , abs_beta , delta ,tm ,tp ,u ,v , xa ; RealInterval aux , aux2 ; 1171 aux = IAMath . add ( IAMath . sqrtx2y2 ( IAMath . add (x , new RealInterval (1) ) ,y) , IAMath . sqrtx2y2 ( IAMath . sub ( new RealInterval (1) ,x) ,y)) ; 1173 aux2 = IAMath . div (aux , new RealInterval (2) ); 1175 beta = IAMath . div (x , aux2 ); 1177 1179 1181 if ( beta .lo < -1) beta . lo = -1; if ( beta .hi > 1) beta . hi =1; abs_beta = IAMath . abs ( beta ); 1183 1185 1187 1189 1191 if ( abs_beta .lo < c1 ){ res = IAMath . arcsin ( beta ); // Normal calculation } else { // Inf ( abs_beta ) >= c1 ; Calculation now with improvements : xa = x; neg_b = x.lo <0; if ( neg_b ) xa = IAMath . mulEsc (xa , -1) ; // Inf ( xa ) >0 : ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 156 Infxa = xa . lo ; if ( Infxa > 1) { tm = IAMath . div (y , IAMath . sub (xa , new RealInterval (1) )); tp = IAMath . div (y , IAMath . add (xa , new RealInterval (1) )); u = IAMath . sqrtp1m1 ( IAMath . sqr ( tm )); v = IAMath . sqrtp1m1 ( IAMath . sqr ( tp )); delta = IAMath . div (( IAMath . sub ( IAMath . mul (tm , tp ) , IAMath . mul ( u ,v))) , ( IAMath . add ( IAMath . add ( new RealInterval (2) ,u) ,v)) ); } else if ( Infxa == 1) { u = IAMath . abs (y); u= IAMath . div ( IAMath . abs (y) , new RealInterval (2) ); // u = |y |/2 delta = IAMath . sub (u , IAMath . sqrtp1m1 ( IAMath . sqr (u))); } else { tp = IAMath . add ( new RealInterval (1) ,xa ); tm = IAMath . sub ( new RealInterval (1) ,xa ); delta = IAMath . mul (tm ,( IAMath . add ( IAMath . sqrt ( IAMath . add ( new RealInterval (1) , IAMath . sqr ( IAMath . div (y , tm )))) , IAMath . mul ( IAMath . sub ( new RealInterval (1) , tp ) , IAMath . sqrtp1m1 ( IAMath . sqr ( IAMath . div (y , tp ))))))); delta = IAMath . times2pown ( delta , -1) ; } res = IAMath . sub ( HALFPI , IAMath . arcsin ( IAMath . sqrt ( IAMath . mul ( delta ,( IAMath . sub ( new RealInterval (2) , delta ))))) ); if ( neg_b ) res = IAMath . mulEsc (res , -1); } return res ; 1193 1195 1197 1199 1201 1203 1205 1207 1209 1211 1213 } 1215 1217 1219 1221 1223 1225 public static Cinterval asin ( Cinterval z ) // ---------------------- 040730 -{ double gr = 6.355804 e307 ; // upper bound for abs ( rez ) ,abs ( imz ) RealInterval rez = z.r1 , imz = z. r2 ; double srez = iimz = simz = irez = rez .lo , rez .hi , imz .lo , imz . hi ; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 157 1227 1231 RealInterval hxl = new RealInterval ( irez ); RealInterval hxu = new RealInterval ( srez ); RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); 1233 double resxl , resxu , resyl , resyu ; 1235 boolean bl = ( iimz < 0.0) && ( simz >0.0) , raxis = ( iimz ==0.0) && ( simz ==0) ; 1229 1237 1239 1241 1243 1245 1247 1249 1251 1253 1255 1257 // // 1 st : check for singularities // if ( ( irez < -1 && ( bl || ( iimz <0 && simz ==0) )) || ( srez >1 && ( bl || ( iimz ==0 && simz >0) )) ) System . out . println (" Erro no Arco Cosseno "); // // check for too large bounds of abs ( rez ) and abs ( imz ) to prevent // overflow by calculating f_aux_asin (...) // resxl = Math . max ( Math . abs ( irez ) , Math . abs ( srez )); resxu = Math . max ( Math . abs ( iimz ) , Math . abs ( simz )); if ( resxl > gr || resxu > gr ) System . out . println (" Erro no Arco Cosseno 2"); // // 2 nd : real part // if ( iimz < 0.0 && simz > 0.0 ) // z intersects [ -1 ,1] { if ( irez <= 0.0 ){ 1259 resxl = IAMath . arcsin ( hxl ). lo ; 1261 } else { 1263 // resxl = Inf ( asin ( hxl / f_aux_asin ( hxl , interval ( max ( - iimz , simz ) ) ) ) ); resxl = Asin_beta (hxl , new RealInterval ( Math . max (- iimz , simz ) )) . lo ; // Blomquist , 19.06.2005; 1265 } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 1267 1269 1271 1273 158 if ( srez < 0.0 ) // resxu = Sup ( asin ( hxu / f_aux_asin ( hxu , interval ( max ( - iimz , simz ) ) ) ) ); resxu = Asin_beta (hxu , new RealInterval ( Math . max (- iimz , simz ) )) . hi ; // Blomquist , 19.06.2005; else resxu = IAMath . arcsin ( hxu ) . hi ; } else { 1275 1277 if ( ( <= // // iimz >= 0.0 && irez >= 0.0 ) || ( simz <= 0.0 && irez 0.0 ) ){ left boundary in quadrants I or III min ( Re ( z ) ) in upper left corner 1279 resxl = 1281 1283 1285 1287 1289 1291 Asin_beta (hxl , hyu ) . lo ; // Blomquist , 19.06.2005; } else { // left boundary in quadrants II or IV // min ( Re ( z ) ) in lower left corner // resxl = Inf ( asin ( hxl / f_aux_asin ( hxl , hyl ) ) ); resxl = } if ( ( <= // // // Asin_beta (hxl , hyl ) . lo ; // Blomquist , 19.06.2005; iimz >= 0.0 && srez >= 0.0 ) || ( simz <= 0.0 && srez 0.0 ) ){ right boundary in quadrants I or III max ( Re ( z ) ) in lower right corner resxu = Sup ( asin ( hxu / f_aux_asin ( hxu , hyl ) ) ); 1293 resxu = 1295 1297 1299 1301 1303 1305 Asin_beta (hxu , hyl ) . hi ; // Blomquist , 19.06.2005; } else // right boundary in quadrants II or IV // max ( Re ( z ) ) in upper right corner // resxu = Sup ( asin ( hxu / f_aux_asin ( hxu , hyu ) ) ); resxu = Asin_beta (hxu , hyu ) . hi ; // Blomquist , 19.06.2005; } // // 3 rd : imaginary part // if ( raxis ) { // Interval argument is now a subset of the real ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 1307 1309 1311 159 axis . // Blomquist , 16.06.2005; if ( srez <0.0) resyl = ACOSH_f_aux ( hxu , hyu ). lo ; else resyl = - ACOSH_f_aux ( hxu , hyu ). hi ; if ( irez >0.0) resyu = - ACOSH_f_aux ( hxl , hyu ). lo ; else resyu = ACOSH_f_aux ( hxl , hyu ). hi ; } else if ( simz <= 0.0 ) 1313 // // // 1315 1317 1319 1321 z in lower half plane min ( Im ( z ) ) in point with max |z| max ( Im ( z ) ) in point with min |z| { if ( irez < - srez ) // most of z in quadrant III { resyl = - ACOSH_f_aux ( hxl , hyl ) . hi ; if ( srez < 0.0 ) 1323 1325 resyu = - ACOSH_f_aux ( hxu , hyu ). lo ; 1327 else 1329 resyu = - ACOSH_f_aux ( new RealInterval (0) , hyu ) . lo ; 1331 1333 1335 } else // { most of z in quadrant IV resyl = - ACOSH_f_aux ( hxu , hyl ) . hi ; System . out . println ( resyl ); if ( irez > 0.0 ){ resyu = - ACOSH_f_aux ( hxl , hyu ) . lo ; 1337 1339 1341 } else resyu = - 1343 1345 1347 ACOSH_f_aux ( new RealInterval (0) , hyu ) . lo ; } } else if ( iimz >= 0.0 ) ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL // // // 1349 160 z in upper half plane min ( Im ( z ) ) in point with min |z| max ( Im ( z ) ) in point with max |z| 1351 { 1353 1355 1357 1359 1361 1363 1365 if ( irez < - srez ) // if ( irez + srez < 0.0 ) // most of z in quadrant II { resyu = ACOSH_f_aux ( hxl , hyu ) . hi ; if ( srez < 0.0 ) resyl = ACOSH_f_aux ( hxu , hyl ) . lo ; else resyl = ACOSH_f_aux ( new RealInterval (0) , hyl ) . lo ; } else // most of z in quadrant I { 1367 resyu = ACOSH_f_aux ( hxu , hyu ) . hi ; 1369 if ( irez > 0.0 ){ 1371 resyl = ACOSH_f_aux ( hxl , hyl ) . lo ; 1373 1375 1377 1379 1381 1383 1385 1387 1389 } else resyl = ACOSH_f_aux ( new RealInterval (0) , hyl ) . lo ; } } else // z intersects imaginary axes // min ( Im ( z ) ) in point in lower half plane with max |z| // max ( Im ( z ) ) in point in upper half plane with max |z| { if ( irez < - srez ) // if ( irez + srez < 0.0 ) // most of z in quadrants II and IV { resyl = - ACOSH_f_aux ( hxl , hyl ) . hi ; resyu = ACOSH_f_aux ( hxl , hyu ) . hi ; } else { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL resyl = resyu = 1391 161 ACOSH_f_aux ( hxu , hyl ). hi ; ACOSH_f_aux ( hxu , hyu ) . hi ; } 1393 } 1395 return new Cinterval ( new RealInterval ( resxl , resxu ) , new RealInterval ( resyl , resyu ) ); 1397 } 1399 public static RealInterval Acos_beta ( RealInterval x , RealInterval y ) // Calculating the improved real part of acos (z); Blomquist 05.06.2005; // Re ( acos (z)) = acos [ 2x /( sqrt [( x +1) ^2+ y ^2] + sqrt [(x -1) ^2+ y ^2]) ] { 1401 1403 1405 1407 1409 1411 1413 1415 RealInterval um = new RealInterval (1) ; double c1 = 0.75; RealInterval res = new RealInterval (0) ,beta , delta ,tm ,tp ,u ,v , xa ; double Infy =y.lo , Infx =x. lo ; RealInterval aux , aux2 , aux3 ; aux = IAMath . sqrtx2y2 ( IAMath . add (um ,x) ,y); aux2 = IAMath . sqrtx2y2 ( IAMath . sub (um ,x) ,y); aux3 = IAMath . div ( IAMath . add (aux , aux2 ) , new RealInterval (2) ); beta = IAMath . div (x , aux3 ); if ( beta .lo < -1) beta . lo = -1; if ( beta .hi > 1) beta . hi = 1; 1417 1419 1421 if ( beta .hi < c1 ) if ( beta .hi <- c1 ) { // Improvement for beta --> -1 xa = IAMath . mulEsc (x , -1) ; // Inf ( xa ) >0: Infx = - Infx ; // Infx > 0: if ( Infx > 1) { 1423 1425 1427 tm = IAMath . div (y ,( IAMath . sub (xa , um ))); tp = IAMath . div (y ,( IAMath . add (xa , um ))); u = IAMath . sqrtp1m1 ( IAMath . sqr ( tm )); v = IAMath . sqrtp1m1 ( IAMath . sqr ( tp )); delta = IAMath . div ( IAMath . sub ( IAMath . mul (tm , tp ) , IAMath . mul (u ,v)) , ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL IAMath . add ( IAMath . add ( new RealInterval (2) ,u) ,v)); 1429 1431 1433 1435 1437 1439 1441 1443 1445 1447 1449 1451 1453 1455 162 } else if ( Infx == 1) { u = IAMath . abs (y); u= IAMath . div ( IAMath . abs (y) , new RealInterval (2) ); // u = |y |/2 delta = IAMath . sub (u , IAMath . sqrtp1m1 ( IAMath . sqr (u))) ; } else { tm = IAMath . div (y ,( IAMath . sub (um , xa ))); tp = IAMath . div (y ,( IAMath . add (um , xa ))); delta = IAMath . sub ( IAMath . mul (tm ,( IAMath . add ( IAMath . sqrt ( IAMath . add (um , IAMath . sqr ( IAMath . div (y , tm )))) , um ))) , IAMath . mul (tp , IAMath . sqrtp1m1 ( IAMath . sqr ( IAMath . div (y , tp ))))); delta = IAMath . times2pown ( delta , -1) ; } res = IAMath . sub ( new RealInterval ( Math . PI ) , IAMath . arcsin ( IAMath . sqrt ( IAMath . mul ( delta ,( IAMath . sub ( new RealInterval (2) , delta ))))) ); } else res = IAMath . arccos ( beta ); // Normal calculation else // Sup ( beta ) >= c1 if ( Infx >1) { tm = IAMath . div (y , IAMath . sub (x , um )); if ( Math . getExponent ( tm . hi ) +1 <= -27) { if ( Infy !=0) { u = IAMath . div ( new RealInterval ( Math . abs ( Infy )) , IAMath . sqrtx2m1 (x)); res = u; } } else { tp = IAMath . div (y , IAMath . add (x , um )); u = IAMath . sqrtp1m1 ( IAMath . sqr ( tm )); v = IAMath . sqrtp1m1 ( IAMath . sqr ( tp )); 1457 delta = IAMath . div ( IAMath . sub ( IAMath . mul (tm , tp ) , IAMath . mul (u ,v)) , IAMath . add ( IAMath . add ( new RealInterval (2) ,u) ,v)); res = IAMath . arcsin ( IAMath . sqrt ( IAMath . mul ( delta ,( IAMath . sub ( new RealInterval (2) , delta ))))); 1459 } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 163 } else if ( Infx ==1) { 1461 1463 if ( Math . getExponent (y. lo ) +1 <= -52) { u = IAMath . sqrt ( IAMath . abs (y)); if (u. hi ==0) res = new RealInterval (0) ; else res = u; } else { 1465 1467 1469 u = IAMath . abs (y); RealInterval aux5 = IAMath . div ( IAMath . abs (y) , new RealInterval (2) ); // u = |y |/2 1471 1473 delta = IAMath . sub ( aux5 , IAMath . sqrtp1m1 ( IAMath . sqr ( aux5 ))); res = IAMath . arcsin ( IAMath . sqrt ( IAMath . mul ( delta ,( IAMath . sub ( new RealInterval (2) , delta )))) ); 1475 } } else { tp = IAMath . add (um ,x); tm = IAMath . sub (um ,x); delta = IAMath . sub ( IAMath . mul (tm ,( IAMath . add ( IAMath . sqrt ( IAMath . add (um , IAMath . sqr ( IAMath . div (y , tm )))) ,um ))) , IAMath . mul (tp , IAMath . sqrtp1m1 ( IAMath . sqr ( IAMath . div (y , tp ))))); delta = IAMath . times2pown ( delta , -1) ; res = IAMath . arcsin ( IAMath . sqrt ( IAMath . mul ( delta ,( IAMath . sub ( new RealInterval (2) , delta )))) ); } 1477 1479 1481 1483 return res ; 1485 } 1487 1491 public static Cinterval asinh ( Cinterval z ) // // asinh ( Z ) = i * asin ( -i * z ) // 1493 { 1489 1495 Cinterval res = asin ( new Cinterval ( z.r2 , IAMath . mul (z.r1 , new RealInterval ( -1) )) ); return new Cinterval ( IAMath . mulEsc ( res .r2 , -1) , res . r1 ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 164 } 1497 1499 1501 1503 1505 1507 public static Cinterval acos ( Cinterval z ) // --------------------- 040730 -{ double gr = 6.355804 e307 ; // upper bound for abs ( rez ) ,abs ( imz ) RealInterval rez = z.r1 , imz = z. r2 ; double irez = rez .lo , srez = rez .hi , iimz = imz .lo , simz = imz . hi ; 1509 1511 1513 1515 1517 1519 1521 1523 1525 1527 1529 1531 1533 1535 RealInterval hxl = new RealInterval ( irez ); RealInterval hxu = new RealInterval ( srez ); RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); boolean bl = ( iimz < 0.0) && ( simz >0.0) , raxis = ( iimz ==0.0) && ( simz ==0) ; double resxl , resxu , resyl , resyu ; // // 1 st : check for singularities // if ( ( irez < -1 && ( bl || ( iimz <0 && simz ==0) )) || ( srez >1 && ( bl || ( iimz ==0 && simz >0) )) ) System . out . println (" Erro ACOS ."); // // check for too large bounds of abs ( rez ) and abs ( imz ) to prevent // overflow by calculating f_aux_asin (...) // resxl = Math . max ( Math . abs ( irez ) , Math . abs ( srez )); resxu = Math . max ( Math . abs ( iimz ) , Math . abs ( simz )); if ( resxl > gr || resxu > gr ) System . out . println (" Erro ACOS 2. "); // // 2 nd : real part // // Blomquist , 06.06.2005; if ( iimz < 0.0 && simz > 0.0 ) ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL // 1537 165 z intersects [ -1 ,1] on the x - axis { 1539 1541 1543 1545 1547 1549 1551 1553 1555 1557 1559 if ( irez <= 0.0 ) resxu = IAMath . arccos ( hxl ) . hi ; else resxu = Acos_beta (hxl , new RealInterval ( Math . max (- iimz , simz ) )) . hi ; if ( srez < 0.0 ) resxl = Acos_beta (hxu , new RealInterval ( Math . max (- iimz , simz ) )) . lo ; else resxl = IAMath . arccos ( hxu ) . lo ; } else { if ( irez <0 && srez >0) // z intersects the posizive or negative y - axis if ( iimz >= 0) { resxl = Acos_beta (hxu , hyl ) . lo ; resxu = Acos_beta (hxl , hyl ) . hi ; } else { resxl = Acos_beta (hxu , hyu ) . lo ; resxu = Acos_beta (hxl , hyu ) . hi ; } else { if ( ( iimz >= 0.0 && irez >= 0.0 ) || ( simz <= 0.0 && irez < 0.0 ) ){ // left boundary in quadrants I or III // min ( Re ( z ) ) in lower right corner 1561 resxl = Acos_beta (hxu , hyl ) . lo ; 1563 } 1565 else // left boundary in quadrants II or IV // min ( Re ( z ) ) in upper right corner resxl = Acos_beta (hxu , hyu ) . lo ; if ( ( iimz >= 0.0 && srez > 0.0 ) || ( simz <= 0.0 && srez <= 0.0 ) ) // right boundary in quadrants I or III // max ( Re ( z ) ) in upper left corner resxu = Acos_beta (hxl , hyu ) . hi ; else { // right boundary in quadrants II or IV // max ( Re ( z ) ) in lower left corner 1567 1569 1571 1573 1575 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 166 resxu = Acos_beta (hxl , hyl ) . hi ; 1577 } 1579 1581 1583 1585 1587 1589 1591 1593 1595 1597 1599 1601 1603 1605 1607 } } // // 3 rd : imaginary part // if ( raxis ) { // Interval argument is now a subset of the real axis . // Blomquist , 16.06.2005; if ( srez <0.0) resyl = ACOSH_f_aux ( hxu , hyu ). lo ; else resyl = - ACOSH_f_aux ( hxu , hyu ). hi ; if ( irez >0.0) resyu = - ACOSH_f_aux ( hxl , hyu ). lo ; else resyu = ACOSH_f_aux ( hxl , hyu ). hi ; } else if ( simz <= 0.0 ) // z in lower half plane // min ( Im ( z ) ) in point with max |z| // max ( Im ( z ) ) in point with min |z| { if ( irez + srez < 0.0 ) // most of z in quadrant III { resyl = - ACOSH_f_aux ( hxl , hyl ) . hi ; if ( srez < 0.0 ) resyu = - ACOSH_f_aux ( hxu , hyu ) . lo ; else resyu = - ACOSH_f_aux ( new RealInterval (0) , hyu ) . lo ; } else // most of z in quadrant IV { resyl = - ACOSH_f_aux ( hxu , hyl ) . hi ; if ( irez > 0.0 ) resyu = - ACOSH_f_aux ( hxl , hyu ) . lo ; else resyu = - ACOSH_f_aux ( new RealInterval (0) , hyu ) . lo ; 1609 1611 1613 } 1615 1617 } else if ( iimz >= 0.0 ) // z in upper half plane ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL // // 1619 1621 1623 1625 1627 1629 1631 1633 1635 1637 1639 1641 1643 1645 1647 1649 1651 1653 1655 1657 1659 167 min ( Im ( z ) ) in point with min |z| max ( Im ( z ) ) in point with max |z| { if ( irez < - srez ) // if ( irez + srez < 0.0 ) // most of z in quadrant II { resyu = ACOSH_f_aux ( hxl , hyu ) . hi ; if ( srez < 0.0 ) resyl = ACOSH_f_aux ( hxu , hyl ) . lo ; else resyl = ACOSH_f_aux ( new RealInterval (0) , hyl ) . lo ; } else // most of z in quadrant I { resyu = ACOSH_f_aux ( hxu , hyu ) . hi ; if ( irez > 0.0 ) resyl = ACOSH_f_aux ( hxl , hyl ). lo ; else resyl = ACOSH_f_aux ( new RealInterval (0) , hyl ) . lo ; } } else // z intersects imaginary axes // min ( Im ( z ) ) in point in lower half plane with max |z| // max ( Im ( z ) ) in point in upper half plane with max |z| { if ( irez < - srez ) // if ( irez + srez < 0.0 ) // most of z in quadrants II and IV { resyl = - ACOSH_f_aux ( hxl , hyl ) . hi ; resyu = ACOSH_f_aux ( hxl , hyu ) . hi ; } else { resyl = - ACOSH_f_aux ( hxu , hyl ) . hi ; resyu = ACOSH_f_aux ( hxu , hyu ) . hi ; } } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 168 return new Cinterval ( new RealInterval ( resxl , resxu ) , mulEsc ( new RealInterval ( resyl , resyu ) , -1) ); 1661 IAMath . 1663 } 1665 public static Cinterval acosh ( Cinterval z ) // // acosh ( z ) = i * acos ( z ) = +/ - i * ( pi / 2 - asin ( z ) ) // { RealInterval rez = z.r1 , imz = z. r2 ; 1667 1669 1671 1673 1675 1677 double irez = srez = iimz = simz = rez .lo , rez .hi , imz .lo , imz . hi ; 1679 1681 1683 1685 RealInterval hxl = new RealInterval ( irez ); RealInterval hxu = new RealInterval ( srez ); RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); double resxl , resxu , resyl , resyu ; 1687 // cinterval res ; 1689 1691 1693 1695 1697 1699 // // 1 st : check for singularities // if ( ( iimz <= 0.0 && simz >= 0.0 ) && ( irez < System . out . println (" Erro no ACOSH "); // With this restriction the complex interval real axis must not have any common // point , if irez < +1; // So for example the negative real axis must from above if irez <1 , although this // should be possible if the principal branch the above restriction is too widely in // some cases ; Blomquist , 21.06.2005; 1.0 ) ) argument and the not be touched is considered ! So ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 1701 1703 1705 169 // // 2 nd : z in upper half plane ( or on the real axis ) // acosh ( z ) = + i * ( pi / 2 - asin ( z ) ) // if ( iimz > 0.0 ) { 1707 1709 1711 1713 1715 1717 1719 1721 1723 1725 1727 1729 1731 1733 1735 1737 Cinterval res = acos (z); return new Cinterval ( IAMath . mulEsc ( res .r2 , -1) ,res . r1 ); } // // 3 rd : z in lower half plane // acosh ( z ) = - i * ( pi / 2 - asin ( z ) ) // if ( simz < 0.0 ) { // cinterval res = HALFPI () - asin ( z ); Cinterval res = acos (z); // Blomquist , 14.06.2005 return new Cinterval ( res .r2 , IAMath . mulEsc ( res .r1 , -1) ); } // // z intersects [1 , infinity ) // // real part // minimum on the left on real axes , maximum in lower or upper right corner // resxl = IAMath . coshI ( hxl ) . lo ; RealInterval ytilde = new RealInterval (( Math . max ( -iimz , simz ) )); // resxu = Sup ( acosh ( f_aux_asin ( hxu , ytilde ) ) ); resxu = ACOSH_f_aux (hxu , ytilde ) . hi ; // Blomquist , 14.06.2005; // // imaginary part // minimum in lower left corner , maximum in upper left corner // // resyl = -Sup ( acos ( hxl / f_aux_asin ( hxl , hyl ) ) ); resyl = - Acos_beta (hxl , hyl ) . hi ; // Blomquist , 14.06.2005; // resyu = Sup ( acos ( hxl / f_aux_asin ( hxl , hyu ) ) ); resyu = Acos_beta (hxl , hyu ). hi ; 1739 return new Cinterval ( new RealInterval ( resxl , resxu ) , new ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 170 RealInterval ( resyl , resyu ) ); 1741 } 1743 1745 1747 1749 1751 1753 1755 public static double re_vert1 ( double x , RealInterval hx , double rew_inf , double rew_sup , double resxl ) // ---------------------- 040729 -// // Subroutine of analytic inverse tangent function . // Evaluate real part on a vertical boundary . // { RealInterval dois = new RealInterval (2) ; if ( x == 0.0 ) // singularities have been handled before , hence Re ( w ) > 0 { 1757 1759 1761 1763 1765 resxl = 0.0; return resxl ; } else { if ( x > 0.0 ) // w in quadrants I and / or II // atan is the inverse function of tan (t) , t in (- pi /2 , pi /2) . { 1767 1771 resxl = rew_sup > 0.0 ? IAMath . div ( Atan ( IAMath . mul ( dois , hx ) , rew_sup ) , dois ). lo : ( rew_sup < 0.0 ? IAMath . div ( IAMath . add ( Atan ( IAMath . mul ( dois , hx ) , rew_sup ) , new RealInterval ( Math . PI )) , dois ). lo : IAMath . div ( HALFPI , dois ). lo ); 1773 return resxl ; 1769 1775 1777 } else // { w in quadrants III and / or IV ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 171 1779 resxl = rew_inf < 0.0 ? IAMath . div ( IAMath . sub ( Atan ( IAMath . mul ( dois , hx ) , rew_inf ) , new RealInterval ( Math . PI )) , dois ). lo : ( rew_inf > 0.0 ? IAMath . div ( Atan ( IAMath . mul ( dois , hx ) , rew_inf ) , dois ). lo : - IAMath . div ( HALFPI , dois ). hi ); return resxl ; 1781 1783 } 1785 } } // re_vert 1787 1789 1791 1793 1795 1797 1799 public static double re_vert2 ( double x , RealInterval hx , double rew_inf , double rew_sup , double resxu ) // ---------------------- 040729 -// // Subroutine of analytic inverse tangent function . // Evaluate real part on a vertical boundary . // { RealInterval dois = new RealInterval (2) ; if ( x == 0.0 ) // singularities have been handled before , hence Re ( w ) > 0 { 1801 1803 1805 1807 1809 resxu = 0.0; return resxu ; } else { if ( x > 0.0 ) // w in quadrants I and / or II // atan is the inverse function of tan (t) , t in (- pi /2 , pi /2) . { 1811 1813 resxu = rew_inf > 0.0 ? IAMath . div ( Atan ( IAMath . mulEsc (hx ,2) , rew_inf ) , dois ) . hi : ( rew_inf < 0.0 ? IAMath . div ( IAMath . add ( Atan ( IAMath . mulEsc (hx ,2) , rew_inf ) , new RealInterval ( Math . PI )) , dois ) . hi ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 172 : IAMath . div ( HALFPI , dois ) . hi ); 1815 return resxu ; 1817 } else // { 1819 1821 w in quadrants III and / or IV 1823 resxu = rew_sup < 0.0 ? IAMath . div ( IAMath . sub ( Atan ( IAMath . mulEsc (hx ,2) , rew_sup ) , new RealInterval ( Math . PI )) , dois ) . hi : ( rew_sup > 0.0 ? IAMath . div ( Atan ( IAMath . mulEsc (hx ,2) , rew_sup ) , dois ) . hi : - IAMath . div ( HALFPI , dois ) . lo ); return resxu ; 1825 1827 } 1829 } } // re_vert 1831 1833 1835 1837 1839 1841 1843 public static RealInterval Aux_1_atan ( double x) // x >=0; // Calculating : ln [ 1+2/( sqrt (1+ x ^2) -1) ], [x] = x , // [x] is a point interval ! // Blomquist ; 19.02.05; { int exOv = +54; int exUn = -26; RealInterval res , ix = new RealInterval (x) , // ix is point interval with x >=0; r ,t; int ex =(( int ) Math . getExponent (x)) +1; 1845 1847 1849 1851 1853 if (ex >= exOv ) { // preventing overflow r = IAMath . div ( new RealInterval (2) ,ix ); t = IAMath . mul (r , new RealInterval ( Math . nextAfter (1.0 , Double . MIN_VALUE ))); r = IAMath . mulEsc (r , Math . nextUp (1.0) ); res = new RealInterval (t.lo ,r. hi ); } else if (ex <= exUn ) { // x < 2^( -27) res = IAMath . sub ( U_atan , IAMath . mulEsc ( IAMath . ln ( ix ) ,2)); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 1855 1857 1859 173 } else { // normal calculation t = IAMath . sqrtp1m1 ( IAMath . sqr ( ix ) ); // t = sqrt (1+ x ^2) -1 RealInterval aux = IAMath . add ( new RealInterval (1) , IAMath . div ( new RealInterval (2) , IAMath . sub ( IAMath . sqrt ( IAMath . add ( new RealInterval (1) , IAMath . sqr (t))) , new RealInterval (1) ))); res = IAMath . ln ( aux ); // res = ln [1 + 2/( sqrt (1+ x ^2) -1) ] } return res ; } // Aux_1_atan 1861 1863 1865 1867 1869 1871 1873 public static RealInterval Q_atan_UPSIGN ( RealInterval x , RealInterval y) { // x: abs ( Re (z)); x is real interval // y: Inf ( Im (z)); y is point interval // Q_atan_UPSIGN : ln [ 1 + 4y /( x ^2+(1 - y) ^2) ] RealInterval um = new RealInterval (1) ; RealInterval dois = new RealInterval (2) ; RealInterval quatro = new RealInterval (4) ; int n = 511; RealInterval res ,t ,t1 , t2 ; int ex_x ,ex ,s; if (y. lo ==1.0 && y. hi ==1.0) { 1875 1877 if (x.lo >1.0) { t = IAMath . div ( dois ,x); 1879 res = IAMath . lnp1 ( IAMath . sqr (t)); 1881 1883 } else if (x.hi <1) { 1885 res = IAMath . sub ( IAMath . ln ( IAMath . add ( quatro , IAMath . sqr (x) )) , IAMath . mulEsc ( IAMath . ln (x) ,2)); 1887 } else { // Punkt 3.: 1889 t = new RealInterval (x. hi ); 1891 t = IAMath . div ( dois ,t); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 174 t1 = IAMath . lnp1 ( IAMath . sqr (t)); 1893 t = new RealInterval (x. lo ); t2 = IAMath . sub ( IAMath . ln ( IAMath . add ( quatro , IAMath . sqr (t)) ) , IAMath . mulEsc ( IAMath . ln (t) ,2)); res = new RealInterval ( t1 .lo , t2 . hi ); 1895 } } else { // y <> [1 ,1] 1897 1899 ex_x = ( int ) Math . getExponent ( IAMath . abs (x). hi ) +1; ex = ( int ) Math . getExponent ( IAMath . abs (y). hi ) +1; if ( ex_x > ex ) ex = ex_x ; // Maximum if (ex >n) { // scaling : s = n -ex -1; t = x; t= IAMath . times2pown (t ,s); // fast scaling with 2^( s) 1901 1903 1905 1907 t1 = y; t1 = IAMath . times2pown (t1 ,s); // fast scaling with 2^( s) 1909 1911 t2 = IAMath . add ( IAMath . sqr (t) , IAMath . sqr ( IAMath . sub ( new RealInterval (( Math . pow (2 ,( s +1) -1))) ,t1 ))); // t2 : denominator 1913 t = IAMath . div (y , t2 ); // scaled quotient 1915 t= IAMath . times2pown (t ,2* s +2) ; // back - scaling with 2^( s +2) ; ’+2 ’: factor 4 !! 1917 res = IAMath . lnp1 (t); } else res = IAMath . lnp1 ( IAMath . div ( IAMath . mulEsc (y ,4) ,( IAMath . add ( IAMath . sqr (x) , IAMath . sqr ( IAMath . sub (um ,y)))))); // normal calculation 1919 1921 } return res ; } // Q_atan_UPSIGN 1923 1925 1927 /* public static RealInterval Q_atan_UPSIGN ( RealInterval x , RealInterval y) { // x: abs ( Re (z)); x is real interval ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 1935 // y: Inf ( Im (z)); y is point interval // Q_atan_UPSIGN : ln [ 1 + 4y /( x ^2+(1 - y) ^2) ] System . out . println (" x: "+ x); int n = 511; RealInterval res ,t ,t1 , t2 ; int ex_x ,ex ,s; if (y. lo ==1.0 && y. hi ==1.0) { if (x.lo >1.0) { 1937 t = IAMath . div ( new RealInterval (2) ,x); 1929 1931 1933 175 1939 1941 res = IAMath . lnp1 ( IAMath . sqr (t)); 1943 1945 1947 1949 1951 } else if (x.hi <1) { res = IAMath . sub ( IAMath . ln ( IAMath . add ( new RealInterval (4) , IAMath . sqr (x))) , IAMath . mulEsc ( IAMath . ln (x) ,2)); System . out . println (" tou aki ") ; System . out . println (" res : "+ res ); } else { // Punkt 3.: t = new RealInterval (x. hi ); t = IAMath . div ( new RealInterval (2) ,t); 1953 1955 1957 1959 t1 = IAMath . lnp1 ( IAMath . sqr (t)); t = new RealInterval (x. lo ); t2 = IAMath . sub ( IAMath . ln ( IAMath . add ( new RealInterval (4) , IAMath . sqr (t))) , IAMath . mulEsc ( IAMath . ln (t) ,2)); res = new RealInterval ( t1 .lo , t2 . hi ); } } 1961 1963 1965 else { // y <> [1 ,1] ex_x = ( int ) Math . exp ( IAMath . abs (x). hi ); ex = ( int ) Math . exp ( IAMath . abs (y). hi ); if ( ex_x > ex ) ex = ex_x ; // Maximum if (ex >n) { // scaling : ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 176 s = n -ex -1; t = x; t= IAMath . power (t ,s); // fast scaling with 2^( s) t1 = y; t1 = IAMath . power (t1 ,s); // fast scaling with 2^( s) t2 = IAMath . add ( IAMath . sqr (t) , IAMath . sqr ( IAMath . sub ( new RealInterval ( Math . pow (2 , s)) ,t1 ))); // t2 : denominator t = IAMath . div (y , t2 ); // scaled quotient t= IAMath . power (t ,2* s +2) ; // back - scaling with 2^( s +2) ; ’+2 ’: factor 4 !! 1967 1969 1971 1973 1975 res = IAMath . lnp1 (t); 1977 } else { t= IAMath . add ( IAMath . sqr (x) , IAMath . sqr ( IAMath . sub ( new RealInterval (1) ,y))); 1979 RealInterval aux = IAMath . div ( IAMath . mulEsc (y ,4) , IAMath . add ( IAMath . sqr (x) , IAMath . sqr ( IAMath . sub ( new RealInterval (1) ,y)))); res = IAMath . lnp1 ( aux ); 1981 1983 } } return res ; } // Q_atan_UPSIGN */ 1985 1987 1989 1991 1993 public static Cinterval atan ( Cinterval z ) { RealInterval rez = z.r1 , imz = z. r2 ; 1999 double irez = srez = iimz = simz = 2001 int n = 511; // For possible scaling 2003 RealInterval hxl = new RealInterval ( irez ); 1995 1997 rez .lo , rez .hi , imz .lo , imz . hi ; // ----- 040912 -- ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 2005 177 RealInterval hxu = new RealInterval ( srez ); RealInterval hyl = new RealInterval ( iimz ); RealInterval hyu = new RealInterval ( simz ); 2007 2025 double resxl =0 , resxu =0 , resyl , resyu ; // // 1 st : check for singularities // if ( ( irez <= 0.0 && srez >= 0.0 ) && ( iimz <= -1.0 || simz >= 1.0 ) ) System . out . println (" ERRO tan "); // // 2 nd : real part // Re ( atan ( z ) ) = Arg ( w ) / 2, where w = 1 - x ^2 - y ^2 + i * 2x ) // // evaluate atan on vertical boundaries // RealInterval // y_sqr = sqr ( imz ) , // rew_l = (1 - y_sqr ) - sqr ( hxl ) , // Blomquist ; before : rew_l = 1 - sqr ( hxl ) - y_sqr , // rew_u = (1 - y_sqr ) - sqr ( hxu ); // Blomquist ; before : rew_u = 1 - sqr ( hxu ) - y_sqr ; rew_l , rew_u ; 2027 /* 2009 2011 2013 2015 2017 2019 2021 2023 2029 2031 2033 2035 ------------------------------ Blomquist --------------------------------------------------- */ /* ---------Improvements for Im (z) = [1 ,1] or Im (z) = [ -1 , -1] ------------------ */ boolean sqrImz_1 = ( iimz == simz ) && ( iimz ==1.0 || iimz == -1.0) ; // Test for Im (z) = [1 ,1] or [ -1 , -1] if ( sqrImz_1 ) { rew_l hxl = rew_u hxu = 2037 2039 } else { = IAMath . mulEsc ( IAMath . abs ( hxl ) , -1); new RealInterval ( Math . signum ( irez )); = IAMath . mulEsc ( IAMath . abs ( hxu ) , -1); new RealInterval ( Math . signum ( srez )); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL int ex ,s; double scf ; // Scaling factor RealInterval imz_ ; int ex1 = ( int ) Math . getExponent ( iimz ) +1; int ex2 = ( int ) Math . getExponent ( simz ) +1; if (ex2 > ex1 ) ex1 = ex2 ; ex = ( int ) Math . getExponent ( irez ) +1; if (ex1 > ex ) ex = ex1 ; // Maximum if (ex >n) { // Scaling necessary s = n - ex - 1; scf = Math . pow (2 , s); // scf : scaling factor 2^ s hxl = IAMath . power (hxl ,s); // hxl = hxl * 2^ s imz_ = imz ; imz_ = IAMath . power ( imz_ ,s); // imz_ = imz_ * 2^ s rew_l = IAMath . sub (( IAMath . sub ( new RealInterval ( scf ) , IAMath . sqr ( imz_ ))) , IAMath . sqr ( hxl )); // here now without overflow !! hxl = IAMath . power (hxl ,s); // hxl = hxl * 2^ s } else rew_l = IAMath . sub (( IAMath . sub ( new RealInterval (1) , IAMath . sqr ( imz ))) , IAMath . sqr ( hxl )); 2041 2043 2045 2047 2049 2051 2053 2055 2057 ex = ( int ) Math . getExponent ( srez ) +1; if (ex1 > ex ) ex = ex1 ; // Maximum if (ex >n) { // Scaling necessary s = n - ex - 1; scf = Math . pow (2 , s); // scf : scaling factor 2^ s hxu = IAMath . power (hxu ,s); // hxu = hxu * 2^ s imz_ = imz ; imz_ = IAMath . power ( imz_ ,s); // imz_ = imz_ * 2^ s rew_u = IAMath . sub (( IAMath . sub ( new RealInterval ( scf ) , IAMath . sqr ( imz_ ))) , IAMath . sqr ( hxu )); // here now without overflow !! hxu = IAMath . power (hxu ,s); // hxu = hxu * 2^ s } else rew_u = IAMath . sub (( IAMath . sub ( new RealInterval (1) , IAMath . sqr ( imz ))) , IAMath . sqr ( hxu )); 2059 2061 2063 2065 2067 2069 2071 2073 2075 } /* // // // ------------------------------ Blomquist ; 22.02.05; ---------------------------------------- */ left boundary 178 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 2077 2079 179 double rew_inf = rew_l . lo ; double rew_sup = rew_l . hi ; resxl = re_vert1 ( irez , hxl , rew_inf , rew_sup , resxl ); resxu = re_vert2 ( irez , hxl , rew_inf , rew_sup , resxu ); 2081 2083 2085 2087 // // right boundary // rew_inf = rew_u . lo ; rew_sup = rew_u . hi ; double res_l =0 , res_u =0; res_l = re_vert1 ( srez , hxu , rew_inf , rew_sup , res_l ); 2089 res_u = re_vert2 ( srez , hxu , rew_inf , rew_sup , res_u ); 2091 resxl = Math . min ( resxl , res_l ); 2093 2095 2097 2099 resxu = Math . max ( resxu , res_u ); // // look for extremal values on horizontal boundaries // since atan ( x+ iy ) = atan ( x - iy ) , // intersections can be considered in the upper half plane // double abs_y_min = IAMath . abs ( imz ) . lo ; 2101 2103 2105 2107 2109 2111 2113 2115 if ( abs_y_min > 1.0 ) { RealInterval abs_hyl = new RealInterval ( abs_y_min ) , // abs_hxl = sqrt ( sqr ( abs_hyl ) - 1.0 ); abs_hxl = IAMath . sqrtx2m1 ( abs_hyl ); // Blomquist ; RealInterval aux = IAMath . arctan ( IAMath . div ( new RealInterval (1) , abs_hxl )); if ( abs_hxl . hi > irez && abs_hxl . lo < srez ){ // extremal curve intersects lower boundary of x+i|y| in quadrant I // intersection in Q I or Q IV : update minimum // resxl = inf ( atan ( abs_y_min / abs_hxl ) ) / 2.0; resxl = IAMath . div (( IAMath . sub ( new RealInterval ( Math . PI ) , aux )) , new RealInterval (2.0) ). lo ; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL } else if ( - abs_hxl . lo > irez && - abs_hxl . hi < srez ) // extremal curve intersects lower boundary of x+i|y| in quadrant II // intersection in Q II or Q III : update maximum resxu = IAMath . div ( IAMath . sub ( aux , new RealInterval ( Math . PI )) , new RealInterval (2) ) . hi ; 2117 2119 2121 180 } 2123 2125 // // 2127 // // evaluate atan on horizontal boundaries RealInterval abs_rez = IAMath . abs ( rez ) , im_atan_l , im_atan_u ; 2129 2131 3 rd : imaginary part Im ( atan ( z ) ) = +/ - Ln ( 1 +/ - 4y /( x ^2 + (1 -/+ y) ^2 ) ) / 4 2133 2135 2137 2139 if ( iimz < 0.0 ) // im_atan_l = -ln ( 1 - 4 * hyl / ( x_sqr + sqr ( 1 + hyl ) ) ) / 4.0; // im_atan_l = - lnp1 ( -4 * hyl / ( x_sqr + sqr ( 1 + hyl ) )) / 4.0; // Blomquist im_atan_l = IAMath . div ( IAMath . mulEsc ( Q_atan_UPSIGN ( abs_rez , IAMath . mulEsc (hyl , -1) ) , -1) , new RealInterval (4.0) ); // Blomquist ( Versuch ) else { 2141 // 2143 im_atan_l = ( Q_atan_UPSIGN ( abs_rez , hyl ) ); 2145 im_atan_l = ln ( 1 + 4 * hyl / ( x_sqr + sqr ( 1 - hyl ) ) ) / 4.0; } 2147 // im_atan_l = 2149 IAMath . times2pown ( im_atan_l , -2) ; // Blomquist ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 2151 2153 2155 181 if ( simz < 0.0 ) // im_atan_u = -ln ( 1 - 4 * hyu / ( x_sqr + sqr ( 1 + hyu ) ) ) / 4.0; // im_atan_u = - lnp1 ( -4 * hyu / ( x_sqr + sqr ( 1 + hyu ) ) ) / 4.0; // Blomquist im_atan_u = IAMath . div ( IAMath . mulEsc ( Q_atan_UPSIGN ( abs_rez , IAMath . mulEsc (hyu , -1) ) , -1) , new RealInterval (4.0) ); // Blomquist else { 2157 // im_atan_u = ln ( 1 + 4 * hyu / ( x_sqr + sqr ( 1 - hyu ) ) ) / 4.0; 2159 im_atan_u = Q_atan_UPSIGN ( abs_rez , hyu ); 2161 } im_atan_u = IAMath . times2pown ( im_atan_u , -2) ; // Blomquist 2163 2165 2167 resyl = Math . min ( 2169 resyu = Math . max ( im_atan_l .hi , im_atan_u . hi ); // // look for extremal values on vertical boundaries , // if vertical boundaries intersect extremal curves // double abs_x_min = IAMath . abs ( rez ). lo ; RealInterval x_extr = new RealInterval ( abs_x_min ) , // y_extr = sqrt ( 1.0 + sqr ( x_extr ) ); y_extr = IAMath . sqrt1px2 ( x_extr ); // Blomquist ; 2171 2173 2175 2177 im_atan_l .lo , im_atan_u . lo ); 2179 if ( y_extr . lo < simz && y_extr . hi > iimz ){ 2181 // 2183 2185 extremal curve intersects left boundary of |x |+ iy in quadrant I // update maximum // resyu = Sup ( ln ( 1 + 4 * y_extr / ( sqr ( x_extr ) + sqr ( 1 - y_extr ) ) ) ) / 4.0; resyu = IAMath . div ( Aux_1_atan ( abs_x_min ) , new RealInterval ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL (4.0) ). hi ; 2187 2189 2191 182 // Blomquist } if ( - y_extr . hi < simz && - y_extr . lo > iimz ){ // extremal curve intersects left boundary of |x |+ iy in quadrant IV // update minimum // resyl = -Sup ( ln ( 1 + 4 * y_extr / ( sqr ( x_extr ) + sqr ( 1 - y_extr ) ) ) ) / 4.0; resyl = - IAMath . div ( Aux_1_atan ( abs_x_min ) , new RealInterval (4.0) ). hi ; // Blomquist 2193 } 2195 return new Cinterval ( new RealInterval ( resxl , resxu ) , new RealInterval ( resyl , resyu ) ); 2197 2199 } // // -- end atan ----------------------------------------------------------------- 2201 2203 2205 2207 2209 2211 2213 2215 2217 // -- acot ----------------------------------------------------------040912 -// // Analytic inverse cotangent function // acot ( z ) = atan ( 1/ z ) // The code of acot ( z ) is almost identical to the code of atan ( z ) // public static Cinterval acot ( Cinterval z ) { RealInterval rez = z.r1 , imz = z. r2 ; double irez = rez .lo , srez = rez .hi , iimz = imz .lo , ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 2219 simz = imz . hi ; 2221 int n = 511; // For possible scaling 2223 RealInterval RealInterval RealInterval RealInterval 2225 hxl = hxu = hyl = hyu = new new new new 183 RealInterval ( irez ); RealInterval ( srez ); RealInterval ( iimz ); RealInterval ( simz ); 2227 2229 2231 2233 2235 2237 2239 2241 2243 2245 2247 2249 2251 double resxl = 0, resxu = 0, resyl , resyu ; // // 1 st : check for singularities // if ( ( ( irez <= 0.0) && ( srez >= 0.0) ) && ( ( iimz <= 1.0) && ( simz >= -1.0) ) ) System . out . println (" ERRO NO ACOT "); // // 2 nd : real part // Re ( atan ( z ) ) = Arg ( w ) / 2, where w = 1 - x ^2 - y ^2 + i * 2x ) // Re ( atan ( 1 / z ) ) = Arg ( w ) / 2, where w = x ^2 + y ^2 - 1 + i * 2x ) // // evaluate acot on vertical boundaries // RealInterval // y_sqr = sqr ( imz ) , // rew_l = ( y_sqr - 1) + sqr ( hxl ) , // rew_u = ( y_sqr - 1) + sqr ( hxu ); // rew_l = ( sqr ( hxl ) -1) + y_sqr , // rew_u = ( sqr ( hxu ) -1) + y_sqr ; rew_l , rew_u ; /* ------------------------------ Blomquist --------------------------------------------------- */ /* ---------Improvements for Im (z) = [1 ,1] or Im (z) = [ -1 , -1] ------------------ */ boolean sqrImz_1 = ( iimz == simz ) && ( iimz ==1.0 || iimz == -1.0) ; // Test for Im (z) = [1 ,1] or [ -1 , -1] 2253 2255 if ( sqrImz_1 ) { rew_l = IAMath . abs ( hxl ); hxl = new RealInterval ( Math . signum ( ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL irez )); rew_u = IAMath . abs ( hxu ); srez )); 2257 184 hxu = new RealInterval ( Math . signum ( } else { 2259 2261 2263 int ex ,s; double scf ; // Scaling factor RealInterval imz_ ; int ex1 = Math . getExponent ( iimz ); simz ); if (ex2 > ex1 ) ex1 = ex2 ; int ex2 = Math . getExponent ( 2265 2267 2269 2271 2273 2275 2277 ex = Math . getExponent ( irez ); if (ex1 > ex ) ex = ex1 ; // Maximum if (ex >n) { // Scaling necessary s = n - ex - 1; scf = Math . pow (2 ,( s +1) -1); // scf : scaling factor 2^ s hxl = IAMath . times2pown (hxl ,s); // hxl = hxl * 2^ s imz_ = imz ; imz_ = IAMath . times2pown ( imz_ ,s); // imz_ = imz_ * 2^ s rew_l = IAMath . add ( IAMath . sub ( IAMath . sqr ( imz_ ) , new RealInterval ( scf )) , IAMath . sqr ( hxl )); // here now without overflow !! hxl = IAMath . times2pown (hxl ,s); // hxl = hxl * 2^ s } else rew_l = IAMath . add ( IAMath . sub ( IAMath . sqr ( imz ) , new RealInterval (1) ) , IAMath . sqr ( hxl )); 2279 2281 2283 2285 2287 2289 ex = Math . getExponent ( srez ) +1; if (ex1 > ex ) ex = ex1 ; // Maximum if (ex >n) { // Scaling necessary s = n - ex - 1; scf = Math . pow (2 ,( s +1) -1); // scf : scaling factor 2^ s hxu = IAMath . times2pown (hxu ,s); // hxu = hxu * 2^ s imz_ = imz ; imz_ = IAMath . times2pown ( imz_ ,s); // imz_ = imz_ * 2^ s rew_u = IAMath . add ( IAMath . sub ( IAMath . sqr ( imz_ ) ,new RealInterval ( scf )) , IAMath . sqr ( hxu )); // here now without overflow !! ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL hxu = IAMath . times2pown (hxu ,s); // hxu = hxu * 2^ s } else rew_u = IAMath . add ( IAMath . sub ( IAMath . sqr ( imz ) ,new RealInterval (1.0) ) , IAMath . sqr ( hxu )); 2291 2293 } /* ------------------------------ Blomquist ; 22.02.05; ---------------------------------------- */ 2295 2297 2299 // // left boundary // double rew_inf = rew_l . lo ; double rew_sup = rew_l . hi ; 2301 2303 2305 2307 2309 2311 2313 resxl = re_vert1 ( irez , hxl , rew_inf , rew_sup , resxl ); resxu = re_vert2 ( irez , hxl , rew_inf , rew_sup , resxu ); // // right boundary // rew_inf = rew_u . lo ; rew_sup = rew_u . hi ; double res_l = 0, res_u = 0; res_l = re_vert1 ( srez , hxu , rew_inf , rew_sup , res_l ); res_u = re_vert2 ( srez , hxu , rew_inf , rew_sup , res_u ); 2315 2317 2319 2321 2323 2325 2327 2329 2331 resxl = Math . min ( resxl , res_l ); resxu = Math . max ( resxu , res_u ); // // look for extremal values on horizontal boundaries // since acot ( x+ iy ) = acot ( x - iy ) , // intersections can be considered in the upper half plane // double abs_y_min = IAMath . abs ( imz ) . lo ; if ( abs_y_min > 1.0 ) { RealInterval abs_hyl = new RealInterval ( abs_y_min ) , // abs_hxl = sqrt ( sqr ( abs_hyl ) - 1.0 ); abs_hxl = IAMath . sqrtx2m1 ( abs_hyl ); // Blomquist ; 185 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 186 if ( abs_hxl . hi > irez && abs_hxl . lo < srez ){ // extremal curve intersects lower boundary of x+i|y| in quadrant I // intersection in Q I or Q IV : update maximum resxu = IAMath . div ( IAMath . arctan ( IAMath . div ( new RealInterval (1) , abs_hxl ) ) , new RealInterval (2.0) ) . hi ; 2333 2335 2337 } if ( (- abs_hxl . lo ) > irez && (- abs_hxl . hi ) < srez ){ // extremal curve intersects lower boundary of x+i|y| in quadrant II // intersection in Q II or Q III : update minimum 2339 2341 resxl = - IAMath . div ( IAMath . arctan ( IAMath . div ( new RealInterval (1.0) , abs_hxl ) ) , new RealInterval (2.0) ) . hi ; } 2343 2345 2347 2349 2351 2353 2355 } // // // 3 rd : imaginary part Im ( atan ( z ) ) = +/ - Ln ( 1 +/ - 4y /( x ^2 + (1 -/+ y) ^2 ) ) / 4 // Im ( acot ) = - Im ( atan ): We calculate Im ( atan ) and return " -" // // evaluate atan on horizontal boundaries // RealInterval // x_sqr = sqr ( rez ) , // overflow is avoided by calling Q_atan_UPSIGN (...) im_atan_l , im_atan_u , abs_rez = IAMath . abs ( rez ); // Blomquist ; if ( iimz < 0.0 ){ 2357 // 2359 2361 im_atan_l = -ln ( 1 - 4 * hyl / ( x_sqr + sqr ( 1 + hyl ) ) ) / 4.0; im_atan_l = IAMath . div ( IAMath . mulEsc ( Q_atan_UPSIGN ( abs_rez , IAMath . mulEsc (hyl , -1) ) , -1) , new RealInterval (4.0) ); // Blomquist } else { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 2363 2365 2367 2369 2371 // im_atan_l = ln ( 1 + 4 * hyl / ( x_sqr + sqr ( 1 - hyl ) ) ) / 4.0; im_atan_l = IAMath . div ( Q_atan_UPSIGN ( abs_rez , hyl ) , new RealInterval (4.0) ); // Blomquist im_atan_l . hi = Math . nextUp ( im_atan_l . hi ); } if ( simz < 0.0 ) // im_atan_u = -ln ( 1 - 4 * hyu / ( x_sqr + sqr ( 1 + hyu ) ) ) / 4.0; im_atan_u = IAMath . div ( IAMath . mulEsc ( Q_atan_UPSIGN ( abs_rez , IAMath . mulEsc (hyu , -1) ) , -1) , new RealInterval (4.0) ); // Blomquist else { // im_atan_u = ln ( 1 + 4 * hyu / ( x_sqr + sqr ( 1 - hyu ) ) ) / 4.0; 2373 im_atan_u = IAMath . div ( Q_atan_UPSIGN ( abs_rez , hyu ) , new RealInterval ( 4.0) ); // Blomquist 2375 2377 2379 2381 2383 2385 2387 2389 2391 2393 187 } resyl = Math . min ( im_atan_l .lo , im_atan_u . lo ); resyu = Math . max ( im_atan_l . hi , im_atan_u . hi ); // // look for extremal values on vertical boundaries , // if vertical boundaries intersect extremal curves // double abs_x_min = IAMath . abs ( rez ). lo ; RealInterval x_extr = new RealInterval ( abs_x_min ) , // y_extr = sqrt ( 1.0 + sqr ( x_extr ) ); y_extr = IAMath . sqrt1px2 ( x_extr ); // Blomquist if ( y_extr . lo < simz && y_extr . hi > iimz ) // extremal curve intersects left boundary of |x |+ iy in quadrant I // update maximum // resyu = Sup ( ln ( 1 + 4 * y_extr / ( sqr ( x_extr ) + sqr ( 1 - y_extr ) ) ) ) / 4.0; resyu = IAMath . div ( Aux_1_atan ( abs_x_min ) ,new RealInterval (4.0) ). hi ; // Blomquist if ( - y_extr . hi < simz && - y_extr . lo > iimz ) // extremal curve intersects left boundary of |x |+ iy in quadrant IV // update minimum ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 2395 2397 188 // resyl = -Sup ( ln ( 1 + 4 * y_extr / ( sqr ( x_extr ) + sqr ( 1 - y_extr ) ) ) ) / 4.0; resyl = - IAMath . div ( Aux_1_atan ( abs_x_min ) , new RealInterval (4.0) ). hi ; // Blomquist resxu = Math . nextUp ( resxu ); return new Cinterval ( new RealInterval ( resxl , resxu ) , new RealInterval ( -resyu , - resyl ) ); 2399 2401 } // // -- end acot ----------------------------------------------------------------- 2403 2405 // -- atanh ---------------------------------------------------------040912 -- 2407 2409 2411 2413 2415 2417 2419 2421 2423 2425 public static Cinterval atanh ( Cinterval z ) // // atanh ( z ) = - i * atan ( i * z ) // { Cinterval res = atan ( new Cinterval ( IAMath . mulEsc (z.r2 , -1) , z. r1 ) ); return new Cinterval ( res .r2 , IAMath . mulEsc ( res .r1 , -1) ) ; } // // -- end atanh ---------------------------------------------------------------- // -- acoth ---------------------------------------------------------040912 -// */ public static Cinterval acoth ( Cinterval z ) // // acoth ( z ) = i * acot ( i * z ) // { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL Cinterval res = acot ( new Cinterval ( IAMath . mulEsc (z.r2 , -1) , z. r1 ) ); return new Cinterval ( IAMath . mulEsc ( res .r2 , -1) , res . r1 ); 2427 } // // -- end acoth ---------------------------------------------------------------- 2429 2431 public static Complex mid ( Cinterval z ){ Complex c= new Complex ( ’a ’); c.a= ( float ) IAMath . lmidpoint (z. r1 ); c.b= ( float ) IAMath . lmidpoint (z. r2 ); return c; } 2433 2435 2437 2439 2441 2443 189 } Anexo E Complexos Intervalares Utilizados no Teste T Tabela E.1: Complexos Intervalares Utilizados no Teste T Complexos Intervalar 1 [ [ 0 , 0.0238095 ] , [ 0.0294118 , 0.0571429 ] +i [ 2 , -0.0142857 ] , [ 0.08 , 0.0253165 ] ] 2 [ [ 0 , 0.0104167 ] , [ 0.0465116 , 0.0357143 ] +i [ 0.027027 , 0.0108696 ] , [ 0.4 , 0.333333 ] ] 3 [ [ 0.0105263 , 0.0277778 ] , [ 0.025641 , 0.0285714 ] +i [ 0.153846 , 0.0147059 ] , [ 0.02 , 0.0555556 ] ] 4 [ [ 0.0166667 , 0.037037 ] , [ 0.0289855 , 0.0208333 ] +i [ 0.0222222 , 0.015873 ] , [ 0.0172414 , 0.0263158 ] ] 5 [ [ 0.166667 , 0.0224719 ] , [ 0.142857 , 0.0243902 ] +i [ 0.0232558 , -0.0153846 ] , [ 0.0408163 , 0.0212766 ] ] 6 [ [ 0.012987 , 0.0333333 ] , [ 0.0416667 , 0.0235294 ] +i [ 0.0181818 , 0 ] , [ 0.0487805 , 0.0149254 ] ] 7 [ [ -0.0169492 , 0.0526316 ] , [ 0.0240964 , 0.0333333 ] +i [ 0.047619 , 0.0294118 ] , [ 125 , 0.05 ] ] 8 [ [ 0 , 0.04 ] , [ 0.0273973 , 0.0140845 ] +i [ 0.0666667 , 0.0128205 ] , [ 0.027027 , 0.0102041 ] ] 9 [ [ -0.0322581 , 0.0625 ] , [ 0.0377358 , 0.0392157 ] +i [ 0.0392157 , 0.0238095 ] , [ 0.08 , 0.0298507 ] ] 10 [ [ 0.0212766 , 0.0217391 ] , [ 0.2 , 0.1 ] +i [ 0.0169492 , 0.0454545 ] , [ 0.011236 , 0.0869565 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 191 11 [ [ 0.0238095 , 0.0909091 ] , [ 0.0333333 , 0.04 ] +i [ 0.0263158 , 0 ] , [ 0.0119048 , 0.0208333 ] ] 12 [ [ -0.01 , 0.0204082 ] , [ 0.01 , 0.0144928 ] +i [ 0.0235294 , 0.0121951 ] , [ 0.0285714 , 0.037037 ] ] 13 [ [ 0.0666667 , 0.0204082 ] , [ 0.0238095 , 0.25 ] +i [ 0.0454545 , 0.0909091 ] , [ 0.111111 , 0.0714286 ] ] 14 [ [ -0.333333 , 0.020202 ] , [ 0.5 , 0.08 ] +i [ 0.222222 , -0.0222222 ] , [ 0.1 , 0.0222222 ] ] 15 [ [ 0.0121951 , 0.0204082 ] , [ 2 , 0.0338983 ] +i [ 0.0526316 , -0.0123457 ] , [ 0.0103093 , 0.010101 ] ] 16 [ [ 0 , 0.0512821 ] , [ 0.0125 , 0.010989 ] +i [ 0.0172414 , -0.0169492 ] , [ 0.0108696 , 0.0625 ] ] 17 [ [ 0.0588235 , 0.015873 ] , [ 0.0114943 , 0.0263158 ] +i [ 0.0588235 , 0.0142857 ] , [ 0.0465116 , 0.0222222 ] ] 18 [ [ 0.0142857 , 0.0107527 ] , [ 0.0222222 , 0.0263158 ] +i [ 0.153846 , 0 ] , [ 0.0909091 , 0.5 ] ] 19 [ [ 0.030303 , 0.0120482 ] , [ 0.0232558 , 0.0224719 ] +i [ 0.037037 , -0.0555556 ] , [ 0.0172414 , 0.030303 ] ] 20 [ [ 0 , 0.0769231 ] , [ 0.0357143 , 0.0571429 ] +i [ 0.04 , 0 ] , [ 0.153846 , 0.0434783 ] ] 21 [ [ 0.0588235 , 0.04 ] , [ 0.0263158 , 0.0149254 ] +i [ 0.04 , -0.0106383 ] , [ 0.0104167 , 0.0204082 ] ] 22 [ [ -0.0185185 , 0.0588235 ] , [ 0.0138889 , 0.0229885 ] +i [ 0.03125 , 0.0714286 ] , [ 0.0357143 , 0.0116279 ] ] 23 [ [ -0.016129 , 0.0212766 ] , [ 0.0240964 , 0.0121951 ] +i [ 0.0222222 , 0.0103093 ] , [ 0.0434783 , 0.0666667 ] ] 24 [ [ 0 , 0.0185185 ] , [ 0.04 , 0.0181818 ] +i [ 0.181818 , 0.0217391 ] , [ 0.02 , 0.0229885 ] ] 25 [ [ -0.0133333 , 0.666667 ] , [ 0.0769231 , 0.0128205 ] +i [ 0.133333 , 0 ] , [ 0.04 , 0.0571429 ] ] 26 [ [ 0.0123457 , 0.027027 ] , [ 0.0140845 , 0.03125 ] +i [ 0.0289855 , -0.0107527 ] , [ 0.0232558 , 0.333333 ] ] 27 [ [ -0.0106383 , 0.0833333 ] , [ 0.0136986 , 0.016129 ] +i [ 0.0121951 , 0.25 ] , [ 0.030303 , 0.166667 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 192 28 [ [ 0 , 0.0113636 ] , [ 0.0163934 , 0.142857 ] +i [ 0.0266667 , 0 ] , [ 0.0140845 , 0.0277778 ] ] 29 [ [ 0 , 0.0104167 ] , [ 0.04 , 0.1 ] +i [ 0.0769231 , 0.012987 ] , [ 0.0105263 , 0.0169492 ] ] 30 [ [ 0 , 0.1 ] , [ 0.0188679 , 2 ] +i [ 0.0227273 , -0.0163934 ] , [ 0.037037 , 0.181818 ] ] 31 [ [ 0 , 0.0120482 ] , [ 0.0229885 , 0.0151515 ] +i [ 0.0113636 , 0 ] , [ 0.0266667 , 0.0384615 ] ] 32 [ [ 0.0588235 , 0.0263158 ] , [ 0.0322581 , 0.0208333 ] +i [ 0.0769231 , 0.0153846 ] , [ 0.0327869 , 0.333333 ] ] 33 [ [ -0.0333333 , 0.021978 ] , [ 0.04 , 0.011236 ] +i [ 0.03125 , 0.0243902 ] , [ 0.0384615 , 0.015873 ] ] 34 [ [ 0.111111 , 0.0338983 ] , [ 0.05 , 0.25 ] +i [ 0.0163934 , -0.0172414 ] , [ 0.08 , 0.0128205 ] ] 35 [ [ 0 , 0.333333 ] , [ 0.0243902 , 0.0833333 ] +i [ 0.2 , -0.0277778 ] , [ 0.0175439 , 0.0273973 ] ] 36 [ [ -0.0769231 , 0.0263158 ] , [ 0.0277778 , 0.0285714 ] +i [ 0.0322581 , 0.0103093 ] , [ 0.0869565 , 0.111111 ] ] 37 [ [ -0.0285714 , 0.0166667 ] , [ 0.0606061 , 0.0206186 ] +i [ 0.0178571 , 0.0185185 ] , [ 0.031746 , 0.0235294 ] ] 38 [ [ -0.0232558 , 0.166667 ] , [ 0.0555556 , 0.0294118 ] +i [ 0.0408163 , 0.0131579 ] , [ 0.0512821 , 0.0416667 ] ] 39 [ [ 0 , 0.037037 ] , [ 0.0571429 , 0.166667 ] +i [ 0.0119048 , 0 ] , [ 0.010101 , 25 ]] 40 [ [ 0.0178571 , 0.015873 ] , [ 0.0408163 , 0.0243902 ] +i [ 1 , 0.0714286 ] , [ 0.0238095 , 0.0357143 ] ] 41 [ [ -0.0909091 , 0.0103093 ] , [ 0.0135135 , 0.0487805 ] +i [ 0.142857 , 0.0131579 ] , [ 0.0136986 , 0.0526316 ] ] 42 [ [ -0.0666667 , 0.0116279 ] , [ 0.010989 , 0.0102041 ] +i [ 0.0222222 , 0.010989 ] , [ 0.0217391 , 0.037037 ] ] 43 [ [ 0.0102041 , 0.0153846 ] , [ 0.0243902 , 0.5 ] +i [ 0.0666667 , -0.0131579 ] , [ 0.222222 , 0.0107527 ] ] 44 [ [ -0.0107527 , 0.142857 ] , [ 0.0133333 , 1 ] +i [ 0.0128205 , 0 ] , [ 0.0238095 , 0.0714286 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 193 45 [ [ 0.25 , 0.0263158 ] , [ 0.0114943 , 0.020202 ] +i [ 0.0140845 , 0 ] , [ 0.0416667 , 0.2 ] ] 46 [ [ -0.030303 , 0.0307692 ] , [ 0.0465116 , 0.1 ] +i [ 0.142857 , 0 ] , [ 0.2 , 0.105263 ] ] 47 [ [ 0.0769231 , 0.0117647 ] , [ 0.0408163 , 0.0138889 ] +i [ 0.0307692 , 0.0714286 ] , [ 0.0263158 , 0.0217391 ] ] 48 [ [ -0.0416667 , 0.0151515 ] , [ 0.0243902 , 0.0434783 ] +i [ 0.111111 , 0.0526316 ] , [ 0.028169 , 1 ] ] 49 [ [ -0.0227273 , 0.0416667 ] , [ 0.0714286 , 2 ] +i [ 0.0285714 , -0.0625 ] , [ 0.030303 , 0.0689655 ] ] 50 [ [ 0 , 0.011236 ] , [ 0.0465116 , 0.222222 ] +i [ 0.0163934 , -0.0454545 ] , [ 0.0169492 , 0.0363636 ] ] 51 [ [ 0 , 0.027027 ] , [ 0.0238095 , 0.0555556 ] +i [ 0.0740741 , 0 ] , [ 0.025641 , 0.037037 ] ] 52 [ [ 0.0103093 , 0.105263 ] , [ 0.037037 , 0.0833333 ] +i [ 0.0769231 , -0.0178571 ] , [ 0.5 , 0.02 ] ] 53 [ [ 0 , 0.0204082 ] , [ 0.0273973 , 0.0740741 ] +i [ 0.285714 , 0 ] , [ 0.0333333 , 0.4 ] ] 54 [ [ -0.0178571 , 0.133333 ] , [ 0.0105263 , 0.0350877 ] +i [ 0.0377358 , 0 ] , [ 0.0512821 , 0.0120482 ] ] 55 [ [ 0 , 0.010989 ] , [ 0.0392157 , 0.015873 ] +i [ 0.0571429 , 0.0106383 ] , [ 0.037037 , 0.0588235 ] ] 56 [ [ -0.0123457 , 0.0204082 ] , [ 0.04 , 0.111111 ] +i [ 0.142857 , -0.1 ] , [ 0.0689655 , 1 ] ] 57 [ [ 0.0185185 , 0.0227273 ] , [ 0.1 , 0.666667 ] +i [ 0.0322581 , 0 ] , [ 0.0204082 , 0.0240964 ] ] 58 [ [ -0.0107527 , 0.222222 ] , [ 0.05 , 0.0277778 ] +i [ 0.25 , 0 ] , [ 0.0243902 , 0.2 ] ] 59 [ [ 0 , 0.0322581 ] , [ 0.0285714 , 0.111111 ] +i [ 0.0322581 , 0.0166667 ] , [ 0.0212766 , 125 ] ] 60 [ [ 0.0181818 , 0.0178571 ] , [ 0.0625 , 0.0322581 ] +i [ 25 , 0 ] , [ 0.0224719 , 0.0240964 ] ] 61 [ [ 0 , 125 ] , [ 25 , 0.0909091 ] +i [ 0.020202 , 0 ] , [ 0.0224719 , 0.025641 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 194 62 [ [ 0.0138889 , 0.0689655 ] , [ 0.0235294 , 0.0253165 ] +i [ 1 , 0.0138889 ] , [ 0.0116279 , 0.0266667 ] ] 63 [ [ -0.02 , 0.0196078 ] , [ 0.020202 , 0.1 ] +i [ 0.0212766 , 0.0114943 ] , [ 0.0123457 , 0.0588235 ] ] 64 [ [ -0.0114943 , 0.0588235 ] , [ 0.0740741 , 0.0149254 ] +i [ 0.0227273 , 0.0121951 ] , [ 0.0153846 , 0.0487805 ] ] 65 [ [ -0.0144928 , 0.04 ] , [ 0.047619 , 0.0434783 ] +i [ 0.031746 , 0 ] , [ 0.03125 , 0.142857 ] ] 66 [ [ 0 , 0.133333 ] , [ 0.1 , 0.0117647 ] +i [ 0.0350877 , 0.010989 ] , [ 0.0212766 , 0.0103093 ] ] 67 [ [ 0 , 0.05 ] , [ 0.0169492 , 0.0434783 ] +i [ 0.4 , 0.0104167 ] , [ 0.0188679 , 0.0142857 ] ] 68 [ [ -0.0384615 , 0.015873 ] , [ 0.0294118 , 0.0338983 ] +i [ 0.0434783 , 0.0212766 ] , [ 0.0107527 , 0.0263158 ] ] 69 [ [ 0.0131579 , 0.0253165 ] , [ 0.01 , 0.0377358 ] +i [ 0.0204082 , 0 ] , [ 0.0243902 , 125 ] ] 70 [ [ 0 , 0.117647 ] , [ 0.0322581 , 0.04 ] +i [ 0.0769231 , -0.0169492 ] , [ 0.0666667 , 0.047619 ] ] 71 [ [ -0.015625 , 0.020202 ] , [ 0.0425532 , 0.133333 ] +i [ 0.0425532 , 0.011236 ] , [ 0.0142857 , 0.025641 ] ] 72 [ [ -0.0142857 , 0.333333 ] , [ 0.0153846 , 0.0344828 ] +i [ 0.031746 , 0.016129 ] , [ 0.08 , 0.02 ] ] 73 [ [ 0 , 0.0526316 ] , [ 0.0253165 , 0.0106383 ] +i [ 0.0540541 , 0 ] , [ 0.0153846 , 0.0108696 ] ] 74 [ [ -0.0105263 , 0.111111 ] , [ 0.0144928 , 0.0121951 ] +i [ 0.0232558 , 0.0188679 ] , [ 0.0135135 , 0.0377358 ] ] 75 [ [ 0 , 0.0227273 ] , [ 0.166667 , 0.047619 ] +i [ 0.0111111 , 0 ] , [ 0.030303 , 0.166667 ] ] 76 [ [ 0 , 0.2 ] , [ 1 , 0.0104167 ] +i [ 0.0135135 , -0.0111111 ] , [ 0.016129 , 0.0273973 ] ] 77 [ [ 0 , 0.181818 ] , [ 0.0188679 , 0.0120482 ] +i [ 0.0108696 , 0 ] , [ 0.0153846 , 0.0266667 ] ] 78 [ [ -0.0181818 , 0.0128205 ] , [ 0.0111111 , 0.333333 ] +i [ 0.0104167 , 0.0105263 ] , [ 0.0196078 , 0.0454545 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 195 79 [ [ 0.0114943 , 0.111111 ] , [ 125 , 0.111111 ] +i [ 0.0416667 , 0 ] , [ 0.0571429 , 0.2 ] ] 80 [ [ -0.0434783 , 0.0113636 ] , [ 0.0606061 , 0.0175439 ] +i [ 0.0266667 , 0.0208333 ] , [ 0.0454545 , 0.0119048 ] ] 81 [ [ -0.0114943 , 0.0952381 ] , [ 0.166667 , 0.0120482 ] +i [ 0.0350877 , 0.010989 ] , [ 0.0384615 , 0.08 ] ] 82 [ [ 0 , 0.0206186 ] , [ 0.0119048 , 0.0689655 ] +i [ 0.0357143 , -0.037037 ] , [ 0.0138889 , 0.0204082 ] ] 83 [ [ 0.02 , 0.0227273 ] , [ 0.142857 , 1 ] +i [ 0.0392157 , 0.0344828 ] , [ 0.166667 , 0.0392157 ] ] 84 [ [ -0.0128205 , 0.0285714 ] , [ 0.0136986 , 0.0273973 ] +i [ 0.0322581 , -0.5 ] , [ 0.0465116 , 0.025641 ] ] 85 [ [ -0.0169492 , 25 ] , [ 0.0104167 , 0.0142857 ] +i [ 0.0714286 , 0.0232558 ] , [ 0.181818 , 0.0120482 ] ] 86 [ [ -0.0238095 , 0.0238095 ] , [ 0.0229885 , 0.0465116 ] +i [ 0.0909091 , 0.0136986 ] , [ 0.0689655 , 0.0285714 ] ] 87 [ [ 0 , 0.133333 ] , [ 0.020202 , 0.0338983 ] +i [ 0.016129 , -0.015625 ] , [ 0.0350877 , 125 ] ] 88 [ [ 0 , 0.0645161 ] , [ 0.0408163 , 0.0344828 ] +i [ 0.0107527 , 0.0294118 ] , [ 0.0243902 , 0.0298507 ] ] 89 [ [ -0.111111 , 0.0444444 ] , [ 0.0210526 , 0.222222 ] +i [ 0.0377358 , 0.0208333 ] , [ 0.0606061 , 0.0277778 ] ] 90 [ [ -1 , 0.0769231 ] , [ 0.0408163 , 0.0833333 ] +i [ 0.0192308 , -0.0133333 ] , [ 0.0588235 , 0.0108696 ] ] 91 [ [ 0 , 0.0487805 ] , [ 0.0113636 , 0.01 ] +i [ 0.0384615 , -0.0119048 ] , [ 0.0512821 , 0.0215054 ] ] 92 [ [ 0.0125 , 0.0487805 ] , [ 0.333333 , 0.0217391 ] +i [ 0.0107527 , 0.0909091 ] , [ 0.02 , 0.0126582 ] ] 93 [ [ -0.02 , 0.010989 ] , [ 0.0120482 , 0.0126582 ] +i [ 0.0333333 , 0.0526316 ] , [ 0.0222222 , 0.0333333 ] ] 94 [ [ 0 , 0.0140845 ] , [ 0.25 , 0.0206186 ] +i [ 0.0133333 , -0.0434783 ] , [ 0.0833333 , 0.1 ] ] 95 [ [ -0.01 , 0.0181818 ] , [ 0.0714286 , 0.015873 ] +i [ 0.0206186 , 0 ] , [ 0.0625 , 0.4 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 196 96 [ [ 0.166667 , 0.285714 ] , [ 0.0140845 , 0.0238095 ] +i [ 0.0120482 , 0.02 ] , [ 0.0833333 , 0.0169492 ] ] 97 [ [ -0.012987 , 0.025641 ] , [ 0.0196078 , 0.25 ] +i [ 0.0666667 , -0.0121951 ] , [ 0.0104167 , 0.0253165 ] ] 98 [ [ 0.0204082 , 0.0333333 ] , [ 0.0666667 , 0.0144928 ] +i [ 0.0357143 , 0.0108696 ] , [ 0.027027 , 0.0434783 ] ] 99 [ [ -0.0625 , 0.0266667 ] , [ 0.0108696 , 0.0142857 ] +i [ 0.0769231 , 0 ] , [ 0.0212766 , 0.0108696 ] ] 100 [ [ 0.0151515 , 0.031746 ] , [ 0.0178571 , 0.0119048 ] +i [ 0.0105263 , 0 ] , [ 0.0204082 , 0.030303 ] ] 101 [ [ 0.0151515 , 0.0217391 ] , [ 0.028169 , 0.0131579 ] +i [ 0.0111111 , 0.0196078 ] , [ 0.02 , 0.0294118 ] ] 102 [ [ 0 , 0.181818 ] , [ 0.0238095 , 0.03125 ] +i [ 0.0113636 , 0 ] , [ 25 , 0.0454545 ]] 103 [ [ 0 , 0.0298507 ] , [ 0.0229885 , 0.0357143 ] +i [ 0.0344828 , 0.0666667 ] , [ 0.0327869 , 0.0185185 ] ] 104 [ [ -0.04 , 0.0377358 ] , [ 0.0454545 , 0.0103093 ] +i [ 0.0243902 , 0.0454545 ] , [ 0.0178571 , 0.0416667 ] ] 105 [ [ -0.0123457 , 0.0434783 ] , [ 0.0277778 , 0.0454545 ] +i [ 0.0224719 , 0.0185185 ] , [ 0.0606061 , 0.0416667 ] ] 106 [ [ 0.0185185 , 0.117647 ] , [ 0.027027 , 0.016129 ] +i [ 0.0434783 , 0.0135135 ] , [ 0.0133333 , 0.0392157 ] ] 107 [ [ 0.166667 , 0.0121951 ] , [ 0.153846 , 0.012987 ] +i [ 0.0243902 , 0.0208333 ] , [ 0.010989 , 0.0277778 ] ] 108 [ [ -0.0102041 , 0.142857 ] , [ 0.0253165 , 0.0204082 ] +i [ 0.285714 , 0.0138889 ] , [ 0.0298507 , 0.0103093 ] ] 109 [ [ 0.0102041 , 0.0555556 ] , [ 125 , 0.0740741 ] +i [ 0.0117647 , 0.0144928 ] , [ 0.142857 , 0.0344828 ] ] 110 [ [ 0.0147059 , 0.0138889 ] , [ 0.0714286 , 125 ] +i [ 0.0116279 , 0 ] , [ 0.0123457 , 0.0625 ] ] 111 [ [ 0.2 , 0.0188679 ] , [ 0.0138889 , 0.0144928 ] +i [ 0.0212766 , 0.0116279 ] , [ 0.0263158 , 0.166667 ] ] 112 [ [ 0 , 0.0512821 ] , [ 0.0224719 , 0.0357143 ] +i [ 0.0222222 , 0 ] , [ 0.0243902 , 0.0212766 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 197 113 [ [ -0.0121951 , 0.0185185 ] , [ 0.2 , 0.0235294 ] +i [ 0.0208333 , 0.0384615 ] , [ 0.0454545 , 0.0153846 ] ] 114 [ [ 0 , 0.166667 ] , [ 0.142857 , 0.0289855 ] +i [ 0.0384615 , 0 ] , [ 0.0125 , 0.0289855 ] ] 115 [ [ -0.0384615 , 0.0151515 ] , [ 0.0266667 , 0.047619 ] +i [ 0.0277778 , 0.0123457 ] , [ 0.025974 , 0.0178571 ] ] 116 [ [ 0.333333 , 0.0131579 ] , [ 0.015873 , 0.0116279 ] +i [ 0.015873 , 0.0123457 ] , [ 0.027027 , 0.0102041 ] ] 117 [ [ 125 , 0.0133333 ] , [ 0.027027 , 0.0102041 ] +i [ 0.0246914 , 0.0277778 ] , [ 0.0273973 , 1 ] ] 118 [ [ -0.0232558 , 0.0384615 ] , [ 0.1 , 0.0769231 ] +i [ 0.027027 , 0.0178571 ] , [ 0.031746 , 0.0227273 ] ] 119 [ [ 0 , 0.0392157 ] , [ 0.021978 , 0.0555556 ] +i [ 0.0333333 , 0.0142857 ] , [ 0.0104167 , 0.5 ] ] 120 [ [ -0.0666667 , 0.0294118 ] , [ 0.0666667 , 0.0227273 ] +i [ 0.0232558 , 0.0185185 ] , [ 0.0238095 , 0.047619 ] ] 121 [ [ 0.0243902 , 0.166667 ] , [ 0.0208333 , 0.0105263 ] +i [ 0.0227273 , 0.037037 ] , [ 0.025974 , 0.0416667 ] ] 122 [ [ -0.0277778 , 0.0119048 ] , [ 0.0222222 , 0.0178571 ] +i [ 0.0253165 , -0.0125 ] , [ 0.285714 , 0.015873 ] ] 123 [ [ 0 , 0.031746 ] , [ 0.0151515 , 1 ] +i [ 0.333333 , 0 ] , [ 0.0147059 , 0.0142857 ]] 124 [ [ 0.2 , 0.0273973 ] , [ 0.03125 , 0.0344828 ] +i [ 0.0307692 , 0.5 ] , [ 0.0833333 , 0.021978 ] ] 125 [ [ -0.0434783 , 0.0909091 ] , [ 0.030303 , 0.0909091 ] +i [ 0.0434783 , 0.0909091 ] , [ 0.0208333 , 0.0238095 ] ] 126 [ [ 0 , 0.111111 ] , [ 0.0181818 , 0.0869565 ] +i [ 0.25 , 0.0217391 ] , [ 0.025641 , 0.0444444 ] ] 127 [ [ 0 , 0.0322581 ] , [ 0.0294118 , 0.0833333 ] +i [ 0.0105263 , -0.0322581 ] , [ 0.0425532 , 0.0227273 ] ] 128 [ [ -0.0136986 , 0.2 ] , [ 0.0322581 , 0.08 ] +i [ 0.111111 , -0.0263158 ] , [ 0.0133333 , 0.0952381 ] ] 129 [ [ -0.0119048 , 0.0120482 ] , [ 0.1 , 0.0238095 ] +i [ 0.0606061 , 0 ] , [ 25 , 25 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 198 130 [ [ -0.030303 , 0.0263158 ] , [ 0.0217391 , 0.0350877 ] +i [ 0.0104167 , 0.0163934 ] , [ 1 , 0.0106383 ] ] 131 [ [ -0.0108696 , 0.025974 ] , [ 0.0238095 , 0.0384615 ] +i [ 0.0666667 , 0.010989 ] , [ 0.0266667 , 0.0273973 ] ] 132 [ [ 0.010101 , 0.5 ] , [ 0.333333 , 0.025974 ] +i [ 25 , 0 ] , [ 25 , 0.0144928 ] ] 133 [ [ 0.0285714 , 0.0689655 ] , [ 0.0121951 , 0.02 ] +i [ 0.0126582 , 0 ] , [ 0.0833333 , 0.0227273 ] ] 134 [ [ 0.0277778 , 0.0108696 ] , [ 0.0526316 , 0.0714286 ] +i [ 1 , -0.0588235 ] , [ 0.021978 , 0.015873 ] ] 135 [ [ -0.0833333 , 0.03125 ] , [ 0.0869565 , 0.0208333 ] +i [ 0.0298507 , 0.0163934 ] , [ 0.0512821 , 0.0224719 ] ] 136 [ [ 0 , 0.333333 ] , [ 0.0555556 , 0.02 ] +i [ 0.0416667 , -0.037037 ] , [ 0.5 , 0.0204082 ] ] 137 [ [ 0 , 0.1 ] , [ 0.0131579 , 0.0350877 ] +i [ 0.03125 , -0.0104167 ] , [ 0.0444444 , 0.0217391 ] ] 138 [ [ 0 , 0.0263158 ] , [ 0.0232558 , 0.0285714 ] +i [ 1 , 0 ] , [ 0.0126582 , 0.0232558 ] ] 139 [ [ 0.0169492 , 0.0833333 ] , [ 0.021978 , 0.025641 ] +i [ 0.0238095 , 0 ] , [ 0.0208333 , 0.0377358 ] ] 140 [ [ 0 , 0.0555556 ] , [ 0.222222 , 0.0322581 ] +i [ 0.0465116 , 0 ] , [ 0.01 , 0.0224719 ] ] 141 [ [ 0 , 0.0307692 ] , [ 0.0909091 , 0.0322581 ] +i [ 0.0116279 , 0 ] , [ 0.4 , 0.015873 ] ] 142 [ [ 0.0135135 , 0.0444444 ] , [ 0.0444444 , 0.04 ] +i [ 0.105263 , 0 ] , [ 0.015625 , 0.0377358 ] ] 143 [ [ 0 , 0.0188679 ] , [ 0.0125 , 0.037037 ] +i [ 0.0227273 , 0.0434783 ] , [ 0.011236 , 0.03125 ] ] 144 [ [ -0.0125 , 0.117647 ] , [ 0.025974 , 0.0126582 ] +i [ 0.047619 , 0.0625 ] , [ 0.0204082 , 0.010101 ] ] 145 [ [ -0.0107527 , 0.0869565 ] , [ 0.027027 , 0.047619 ] +i [ 0.0229885 , 0.011236 ] , [ 0.111111 , 0.111111 ] ] 146 [ [ 0 , 0.5 ] , [ 0.0645161 , 0.0344828 ] +i [ 0.0625 , 0 ] , [ 0.0188679 , 0.0645161 ]] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 199 147 [ [ 0 , 0.0138889 ] , [ 0.0540541 , 0.0166667 ] +i [ 0.0454545 , 0 ] , [ 0.0294118 , 0.0263158 ] ] 148 [ [ 0 , 0.25 ] , [ 0.0204082 , 0.0384615 ] +i [ 0.0833333 , 0 ] , [ 0.111111 , 0.0487805 ] ] 149 [ [ 0 , 1 ] , [ 0.0487805 , 0.2 ] +i [ 0.0204082 , -0.0119048 ] , [ 0.0196078 , 0.0338983 ] ] 150 [ [ -0.0344828 , 0.025641 ] , [ 1 , 0.0322581 ] +i [ 0.016129 , 0.0526316 ] , [ 0.333333 , 0.0243902 ] ] 151 [ [ 0.025641 , 0.0294118 ] , [ 0.0212766 , 0.0206186 ] +i [ 0.016129 , 0 ] , [ 0.025641 , 0.028169 ] ] 152 [ [ -0.0204082 , 0.0178571 ] , [ 0.030303 , 0.0740741 ] +i [ 1 , -0.0285714 ] , [ 0.0166667 , 0.0212766 ] ] 153 [ [ 0 , 0.0210526 ] , [ 0.0289855 , 0.0714286 ] +i [ 0.010101 , -0.0111111 ] , [ 0.0204082 , 25 ] ] 154 [ [ 0 , 0.0833333 ] , [ 0.0227273 , 0.03125 ] +i [ 0.0363636 , 0.016129 ] , [ 0.0571429 , 0.0116279 ] ] 155 [ [ -0.010989 , 0.0215054 ] , [ 0.0147059 , 0.0408163 ] +i [ 0.0142857 , 0 ] , [ 0.0833333 , 0.0666667 ] ] 156 [ [ 0.0153846 , 0.0111111 ] , [ 0.0338983 , 0.2 ] +i [ 0.0111111 , -0.0208333 ] , [ 0.0243902 , 0.0526316 ] ] 157 [ [ 0 , 0.012987 ] , [ 0.0104167 , 0.0238095 ] +i [ 0.0229885 , 0.0192308 ] , [ 0.1 , 0.0113636 ] ] 158 [ [ 0 , 0.025641 ] , [ 0.015873 , 0.08 ] +i [ 0.030303 , 0 ] , [ 0.030303 , 0.0232558 ]] 159 [ [ 0 , 0.0126582 ] , [ 0.0454545 , 0.0357143 ] +i [ 0.0952381 , 0 ] , [ 0.0135135 , 0.0285714 ] ] 160 [ [ 0 , 0.0175439 ] , [ 0.0277778 , 0.0123457 ] +i [ 0.0555556 , 0 ] , [ 0.0240964 , 0.0384615 ] ] 161 [ [ -0.0169492 , 0.05 ] , [ 0.0208333 , 0.0425532 ] +i [ 0.5 , 0 ] , [ 125 , 25 ] ] 162 [ [ -0.25 , 0.0273973 ] , [ 0.0135135 , 0.0246914 ] +i [ 0.025641 , 0 ] , [ 0.0465116 , 0.111111 ] ] 163 [ [ 0 , 0.0253165 ] , [ 25 , 0.0512821 ] +i [ 0.0454545 , -0.037037 ] , [ 0.015625 , 0.025641 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 200 164 [ [ 0.0166667 , 0.0117647 ] , [ 0.117647 , 0.0263158 ] +i [ 0.25 , 0.0106383 ] , [ 0.0235294 , 0.0444444 ] ] 165 [ [ 0.0625 , 0.0108696 ] , [ 0.0307692 , 0.0833333 ] +i [ 0.0625 , -0.0136986 ] , [ 0.0666667 , 0.047619 ] ] 166 [ [ 0 , 0.0333333 ] , [ 0.0204082 , 0.0357143 ] +i [ 0.020202 , 0.04 ] , [ 0.08 , 0.0133333 ] ] 167 [ [ 0 , 0.0833333 ] , [ 0.0232558 , 1 ] +i [ 0.04 , -0.0106383 ] , [ 0.166667 , 0.153846 ] ] 168 [ [ -0.0526316 , 0.0454545 ] , [ 0.0232558 , 0.0285714 ] +i [ 0.010989 , 0.0232558 ] , [ 0.010101 , 0.0229885 ] ] 169 [ [ 0 , 0.0106383 ] , [ 0.0289855 , 0.0149254 ] +i [ 0.333333 , -0.025641 ] , [ 1 , 0.05 ] ] 170 [ [ 0 , 0.0113636 ] , [ 25 , 0.0266667 ] +i [ 0.047619 , 0.0357143 ] , [ 0.0181818 , 0.0224719 ] ] 171 [ [ 0.0232558 , 0.0294118 ] , [ 0.222222 , 0.016129 ] +i [ 0.0588235 , 0.0114943 ] , [ 0.4 , 0.0232558 ] ] 172 [ [ 0 , 0.03125 ] , [ 0.0108696 , 0.0285714 ] +i [ 0.0625 , 0.0175439 ] , [ 0.0322581 , 0.0769231 ] ] 173 [ [ 0.0769231 , 0.0192308 ] , [ 1 , 0.0111111 ] +i [ 0.0169492 , -0.0238095 ] , [ 0.021978 , 0.142857 ] ] 174 [ [ 0.25 , 0.0298507 ] , [ 0.0192308 , 0.0263158 ] +i [ 0.0689655 , -0.030303 ] , [ 0.016129 , 0.0285714 ] ] 175 [ [ 0.1 , 0.0136986 ] , [ 125 , 0.0210526 ] +i [ 0.333333 , 0.0243902 ] , [ 0.0238095 , 0.015873 ] ] 176 [ [ 0.0140845 , 0.0416667 ] , [ 0.0333333 , 0.0222222 ] +i [ 0.0149254 , 0.0113636 ] , [ 0.0350877 , 0.0606061 ] ] 177 [ [ 0.0175439 , 0.0166667 ] , [ 0.0114943 , 0.0113636 ] +i [ 0.0666667 , 0 ] , [ 0.111111 , 0.0434783 ] ] 178 [ [ 125 , 0.025641 ] , [ 0.0147059 , 0.012987 ] +i [ 0.020202 , 0 ] , [ 0.047619 , 0.037037 ] ] 179 [ [ 0.0555556 , 0.0106383 ] , [ 0.0645161 , 0.0555556 ] +i [ 0.0227273 , 0.012987 ] , [ 0.0666667 , 0.0740741 ] ] 180 [ [ 0.0125 , 0.0307692 ] , [ 0.0263158 , 2 ] +i [ 0.153846 , 0 ] , [ 0.0192308 , 0.012987 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 201 181 [ [ 0.0322581 , 0.016129 ] , [ 0.015625 , 0.2 ] +i [ 0.0425532 , 0 ] , [ 0.111111 , 0.0344828 ] ] 182 [ [ 0 , 0.0215054 ] , [ 0.0217391 , 0.030303 ] +i [ 0.0833333 , -0.016129 ] , [ 0.0217391 , 0.016129 ] ] 183 [ [ 0.0135135 , 0.0208333 ] , [ 0.047619 , 0.027027 ] +i [ 0.0294118 , 0.0344828 ] , [ 0.037037 , 0.1 ] ] 184 [ [ -0.0138889 , 0.0645161 ] , [ 0.0172414 , 0.0121951 ] +i [ 0.0294118 , 0 ] , [ 0.0298507 , 0.0113636 ] ] 185 [ [ 0 , 0.0833333 ] , [ 0.0172414 , 0.333333 ] +i [ 0.0185185 , 0.0138889 ] , [ 0.0123457 , 0.0487805 ] ] 186 [ [ 0.0357143 , 0.0625 ] , [ 0.0444444 , 0.011236 ] +i [ 0.0909091 , -0.0526316 ] , [ 0.1 , 0.0166667 ] ] 187 [ [ -0.0105263 , 0.0645161 ] , [ 0.0106383 , 0.285714 ] +i [ 0.04 , -0.0181818 ] , [ 0.0273973 , 0.0327869 ] ] 188 [ [ -0.016129 , 0.0454545 ] , [ 0.011236 , 0.0149254 ] +i [ 0.0294118 , 0.0116279 ] , [ 0.028169 , 0.0666667 ] ] 189 [ [ -0.0294118 , 0.0227273 ] , [ 0.0512821 , 0.0142857 ] +i [ 0.0238095 , 0.0243902 ] , [ 0.0104167 , 0.0298507 ] ] 190 [ [ 0 , 0.0454545 ] , [ 0.0212766 , 0.0298507 ] +i [ 0.0384615 , 0.0243902 ] , [ 0.0105263 , 0.0526316 ] ] 191 [ [ 0 , 0.0322581 ] , [ 0.0714286 , 0.0206186 ] +i [ 0.0909091 , -0.0111111 ] , [ 0.0344828 , 0.1 ] ] 192 [ [ -0.0714286 , 0.0666667 ] , [ 0.0714286 , 0.25 ] +i [ 0.0105263 , 0.166667 ] , [ 0.0714286 , 0.166667 ] ] 193 [ [ 0 , 0.0204082 ] , [ 0.0289855 , 0.08 ] +i [ 0.166667 , -0.0181818 ] , [ 0.0277778 , 0.0357143 ] ] 194 [ [ -0.0104167 , 2 ] , [ 0.0169492 , 0.025974 ] +i [ 0.0363636 , 0 ] , [ 0.0645161 , 0.03125 ] ] 195 [ [ 0 , 0.0246914 ] , [ 0.0185185 , 0.0106383 ] +i [ 0.0909091 , -0.0116279 ] , [ 0.0344828 , 0.0227273 ] ] 196 [ [ 0.0769231 , 0.0243902 ] , [ 0.0229885 , 0.0571429 ] +i [ 0.0204082 , 0 ] , [ 0.0151515 , 0.0103093 ] ] 197 [ [ -0.0222222 , 0.028169 ] , [ 0.0196078 , 0.0120482 ] +i [ 0.5 , 0.0106383 ] , [ 0.01 , 0.0606061 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 202 198 [ [ 0 , 0.0833333 ] , [ 0.0227273 , 0.0238095 ] +i [ 0.0246914 , 0 ] , [ 0.105263 , 0.0166667 ] ] 199 [ [ -0.0136986 , 25 ] , [ 0.025641 , 0.0263158 ] +i [ 0.666667 , -0.0625 ] , [ 0.0107527 , 0.0416667 ] ] 200 [ [ -0.0175439 , 0.166667 ] , [ 0.0212766 , 0.030303 ] +i [ 0.0243902 , -0.333333 ] , [ 0.181818 , 0.0344828 ] ] 201 [ [ 0 , 0.0253165 ] , [ 0.0217391 , 0.0487805 ] +i [ 0.0294118 , 0.0116279 ] , [ 1 , 0.0144928 ] ] 202 [ [ -0.0263158 , 0.0120482 ] , [ 1 , 0.285714 ] +i [ 0.0555556 , 0 ] , [ 0.0138889 , 0.0714286 ] ] 203 [ [ 0.0169492 , 0.0125 ] , [ 0.0571429 , 0.153846 ] +i [ 0.0106383 , 0.0322581 ] , [ 0.0322581 , 0.0285714 ] ] 204 [ [ -0.0357143 , 0.04 ] , [ 0.0106383 , 0.0555556 ] +i [ 0.04 , -0.0105263 ] , [ 0.0120482 , 0.0294118 ] ] 205 [ [ 0.0384615 , 0.0253165 ] , [ 0.0175439 , 0.025641 ] +i [ 0.25 , -0.0232558 ] , [ 1 , 0.166667 ] ] 206 [ [ -0.0172414 , 0.0555556 ] , [ 0.010101 , 0.0384615 ] +i [ 0.0714286 , 0 ] , [ 0.0769231 , 0.105263 ] ] 207 [ [ 0.0357143 , 0.0123457 ] , [ 0.0178571 , 0.0169492 ] +i [ 0.0208333 , 0.0140845 ] , [ 0.021978 , 0.0135135 ] ] 208 [ [ -0.0106383 , 0.0769231 ] , [ 0.0714286 , 0.08 ] +i [ 0.0666667 , 0.0104167 ] , [ 0.25 , 0.0105263 ] ] 209 [ [ 0 , 2 ] , [ 0.25 , 0.0909091 ] +i [ 0.0215054 , 0 ] , [ 0.0555556 , 0.0555556 ] ] 210 [ [ 0 , 0.0196078 ] , [ 0.0215054 , 0.0222222 ] +i [ 0.0181818 , -0.0416667 ] , [ 0.0185185 , 0.0540541 ] ] 211 [ [ 0.0149254 , 0.01 ] , [ 0.0350877 , 0.0689655 ] +i [ 0.0294118 , 0 ] , [ 0.1 , 0.0217391 ] ] 212 [ [ 0 , 0.0222222 ] , [ 0.0102041 , 0.5 ] +i [ 0.0344828 , -0.0232558 ] , [ 0.4 , 0.0289855 ] ] 213 [ [ 0 , 0.0235294 ] , [ 0.0266667 , 0.0117647 ] +i [ 0.0333333 , 0 ] , [ 0.133333 , 0.0104167 ] ] 214 [ [ 0.0204082 , 0.111111 ] , [ 0.0119048 , 0.0526316 ] +i [ 0.0235294 , 0.0188679 ] , [ 0.0229885 , 0.0142857 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 203 215 [ [ 0.0227273 , 0.0277778 ] , [ 0.0285714 , 0.0106383 ] +i [ 0.0128205 , 0 ] , [ 0.4 , 0.0117647 ] ] 216 [ [ -0.0526316 , 0.0212766 ] , [ 0.0133333 , 0.04 ] +i [ 0.0133333 , 0 ] , [ 0.0135135 , 0.0285714 ] ] 217 [ [ -0.0454545 , 0.0224719 ] , [ 0.0434783 , 0.03125 ] +i [ 0.047619 , 0.142857 ] , [ 0.0277778 , 0.0144928 ] ] 218 [ [ -0.0196078 , 0.142857 ] , [ 0.0222222 , 0.0175439 ] +i [ 0.0217391 , 0 ] , [ 0.0833333 , 0.0526316 ] ] 219 [ [ -0.0666667 , 0.0444444 ] , [ 0.0227273 , 0.0238095 ] +i [ 0.0217391 , 0 ] , [ 0.04 , 0.333333 ] ] 220 [ [ 0.0169492 , 0.666667 ] , [ 0.0114943 , 0.0144928 ] +i [ 0.020202 , 0.0125 ] , [ 0.0833333 , 0.0111111 ] ] 221 [ [ 0 , 0.0434783 ] , [ 0.0666667 , 0.0273973 ] +i [ 0.0540541 , -0.0128205 ] , [ 0.037037 , 0.025974 ] ] 222 [ [ -0.0103093 , 0.0136986 ] , [ 0.0588235 , 0.0588235 ] +i [ 0.0344828 , 0 ] , [ 0.0384615 , 0.0512821 ] ] 223 [ [ -0.0123457 , 0.0114943 ] , [ 0.111111 , 0.0128205 ] +i [ 0.0689655 , -0.0125 ] , [ 0.0416667 , 0.04 ] ] 224 [ [ 0.0175439 , 0.0232558 ] , [ 0.0625 , 0.142857 ] +i [ 0.0117647 , -0.0181818 ] , [ 0.0285714 , 0.1 ] ] 225 [ [ 0.0128205 , 0.025641 ] , [ 0.04 , 0.166667 ] +i [ 0.0229885 , -0.011236 ] , [ 0.0131579 , 0.0454545 ] ] 226 [ [ -125 , 0.011236 ] , [ 125 , 0.222222 ] +i [ 0.181818 , -0.0243902 ] , [ 0.02 , 0.0102041 ] ] 227 [ [ 0 , 0.0240964 ] , [ 0.0119048 , 0.0192308 ] +i [ 0.0333333 , 0 ] , [ 0.0588235 ,1]] 228 [ [ 0.0107527 , 0.0526316 ] , [ 0.0117647 , 0.01 ] +i [ 0.5 , -0.0142857 ] , [ 0.0238095 , 0.0350877 ] ] 229 [ [ 0 , 0.0102041 ] , [ 0.025641 , 0.0266667 ] +i [ 0.0285714 , 0.0185185 ] , [ 0.0294118 , 0.0126582 ] ] 230 [ [ -0.0163934 , 0.4 ] , [ 0.0869565 , 0.0178571 ] +i [ 0.0714286 , 0 ] , [ 0.027027 , 0.0117647 ] ] 231 [ [ 0 , 0.0625 ] , [ 0.0102041 , 0.166667 ] +i [ 0.0540541 , 0.0172414 ] , [ 0.02 , 0.010989 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 204 232 [ [ 0 , 0.0512821 ] , [ 0.0465116 , 0.0344828 ] +i [ 0.0208333 , 0 ] , [ 0.0263158 , 0.285714 ] ] 233 [ [ -0.016129 , 25 ] , [ 0.285714 , 0.2 ] +i [ 0.0107527 , 0.01 ] , [ 0.0263158 , 0.0540541 ] ] 234 [ [ -0.0222222 , 0.0645161 ] , [ 0.010989 , 0.0571429 ] +i [ 125 , 0.0114943 ] , [ 0.0416667 , 0.0298507 ] ] 235 [ [ -0.142857 , 0.0116279 ] , [ 2 , 0.021978 ] +i [ 0.0116279 , 0 ] , [ 0.0526316 , 0.0144928 ] ] 236 [ [ 0 , 0.0117647 ] , [ 0.0208333 , 0.0344828 ] +i [ 0.0540541 , 0 ] , [ 2 , 0.0416667 ] ] 237 [ [ -0.0126582 , 0.0217391 ] , [ 0.285714 , 0.0224719 ] +i [ 0.0175439 , -125 ] , [ 0.0149254 , 0.0172414 ] ] 238 [ [ 0 , 0.0555556 ] , [ 0.021978 , 0.0147059 ] +i [ 125 , -0.0285714 ] , [ 0.0212766 , 0.031746 ] ] 239 [ [ 0.0172414 , 0.012987 ] , [ 0.0434783 , 0.0125 ] +i [ 1 , 0 ] , [ 0.012987 , 0.0307692 ] ] 240 [ [ 0.0125 , 0.0350877 ] , [ 0.0322581 , 0.0208333 ] +i [ 0.05 , 0 ] , [ 0.021978 , 0.0377358 ] ] 241 [ [ -0.0285714 , 0.1 ] , [ 0.0138889 , 0.0465116 ] +i [ 0.05 , 0 ] , [ 0.0454545 , 0.5 ] ] 242 [ [ 0.0416667 , 0.333333 ] , [ 0.0512821 , 0.030303 ] +i [ 0.0151515 , -0.0588235 ] , [ 0.0121951 , 25 ] ] 243 [ [ -0.025641 , 0.0111111 ] , [ 0.142857 , 0.0333333 ] +i [ 0.0192308 , 0.0138889 ] , [ 0.0238095 , 0.0153846 ] ] 244 [ [ 0 , 0.02 ] , [ 0.0104167 , 0.0869565 ] +i [ 0.047619 , 0.0588235 ] , [ 0.0128205 , 0.0188679 ] ] 245 [ [ 0 , 25 ] , [ 0.0238095 , 0.0408163 ] +i [ 0.4 , 0 ] , [ 0.0289855 , 0.0238095 ] ] 246 [ [ 0.0121951 , 0.0625 ] , [ 0.0133333 , 0.0188679 ] +i [ 0.0212766 , 0 ] , [ 0.08 , 0.0149254 ] ] 247 [ [ -0.0555556 , 0.0217391 ] , [ 0.0238095 , 0.0151515 ] +i [ 0.0217391 , 0.0138889 ] , [ 0.0166667 , 1 ] ] 248 [ [ 0.0188679 , 0.0131579 ] , [ 0.0425532 , 0.030303 ] +i [ 0.0222222 , 0.0212766 ] , [ 0.0434783 , 0.25 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 205 249 [ [ 0.0175439 , 0.0384615 ] , [ 0.0140845 , 0.027027 ] +i [ 0.0104167 , 0.0106383 ] , [ 0.0833333 , 0.030303 ] ] 250 [ [ 0.0285714 , 0.0196078 ] , [ 0.0625 , 0.027027 ] +i [ 0.016129 , 0.0163934 ] , [ 0.0235294 , 0.0333333 ] ] 251 [ [ 0 , 0.0298507 ] , [ 0.0588235 , 0.011236 ] +i [ 0.0769231 , -0.5 ] , [ 0.0909091 , 0.0196078 ] ] 252 [ [ -0.010989 , 0.0294118 ] , [ 0.0952381 , 0.0434783 ] +i [ 0.0238095 , 0 ] , [ 0.0206186 , 0.0588235 ] ] 253 [ [ 0 , 0.142857 ] , [ 1 , 0.0188679 ] +i [ 0.0434783 , -0.016129 ] , [ 0.0384615 , 0.0526316 ] ] 254 [ [ 0 , 0.0149254 ] , [ 0.03125 , 0.0232558 ] +i [ 0.010101 , -0.0434783 ] , [ 0.0178571 , 0.0227273 ] ] 255 [ [ -0.0140845 , 0.0212766 ] , [ 0.0243902 , 0.0102041 ] +i [ 0.0232558 , 0.0153846 ] , [ 0.0210526 , 0.0235294 ] ] 256 [ [ 0 , 0.0294118 ] , [ 0.0625 , 0.0434783 ] +i [ 0.0263158 , -0.0181818 ] , [ 0.0204082 , 0.1 ] ] 257 [ [ 0.047619 , 0.0169492 ] , [ 0.0434783 , 0.0333333 ] +i [ 0.0204082 , -0.01 ] , [ 0.02 , 0.0952381 ] ] 258 [ [ -125 , 0.0147059 ] , [ 0.222222 , 0.0444444 ] +i [ 0.0142857 , -0.0121951 ] , [ 25 , 0.111111 ] ] 259 [ [ -0.0144928 , 0.0235294 ] , [ 0.0689655 , 0.0212766 ] +i [ 0.0434783 , 0.0121951 ] , [ 0.133333 , 0.04 ] ] 260 [ [ 0 , 0.0238095 ] , [ 0.0227273 , 0.0294118 ] +i [ 0.0204082 , 0.0125 ] , [ 0.027027 , 0.0178571 ] ] 261 [ [ 0.0131579 , 0.0136986 ] , [ 0.012987 , 1 ] +i [ 0.0625 , 0 ] , [ 0.0625 , 0.0246914 ] ] 262 [ [ 0.010989 , 0.0232558 ] , [ 0.105263 , 0.0140845 ] +i [ 0.03125 , -0.016129 ] , [ 0.1 , 0.0121951 ] ] 263 [ [ 0.0222222 , 0.0416667 ] , [ 0.0217391 , 0.285714 ] +i [ 0.0434783 , 0 ] , [ 0.0210526 , 0.025641 ] ] 264 [ [ 0 , 0.0144928 ] , [ 0.0322581 , 0.0178571 ] +i [ 0.0149254 , 0 ] , [ 0.153846 , 0.0175439 ] ] 265 [ [ 0 , 0.153846 ] , [ 0.0196078 , 0.0131579 ] +i [ 0.0833333 , 0 ] , [ 0.0208333 , 0.0224719 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 206 266 [ [ -0.030303 , 0.031746 ] , [ 0.0227273 , 0.0338983 ] +i [ 0.0166667 , 0.0138889 ] , [ 0.0588235 , 0.0273973 ] ] 267 [ [ 0.0113636 , 0.0119048 ] , [ 0.166667 , 0.0204082 ] +i [ 0.0425532 , 0.0142857 ] , [ 0.0131579 , 0.111111 ] ] 268 [ [ 0.0116279 , 0.025641 ] , [ 0.0229885 , 0.0243902 ] +i [ 0.0116279 , 0 ] , [ 0.0217391 , 25 ] ] 269 [ [ 0.027027 , 0.0377358 ] , [ 0.0454545 , 0.0163934 ] +i [ 0.0120482 , 0 ] , [ 0.0224719 , 0.05 ] ] 270 [ [ 0 , 0.0208333 ] , [ 0.0454545 , 0.333333 ] +i [ 0.0434783 , 0 ] , [ 0.0153846 , 0.05 ] ] 271 [ [ -0.01 , 0.0163934 ] , [ 0.0909091 , 0.0108696 ] +i [ 0.0147059 , -0.0294118 ] , [ 0.0131579 , 0.0540541 ] ] 272 [ [ 0.010101 , 0.0625 ] , [ 0.0465116 , 0.0208333 ] +i [ 0.0149254 , -0.0175439 ] , [ 0.0114943 , 0.0263158 ] ] 273 [ [ 0 , 0.0363636 ] , [ 0.153846 , 0.0188679 ] +i [ 0.0512821 , -0.142857 ] , [ 0.0769231 , 0.0645161 ] ] 274 [ [ 0.0140845 , 0.0285714 ] , [ 25 , 0.111111 ] +i [ 0.030303 , 0 ] , [ 0.0135135 , 0.0243902 ] ] 275 [ [ 0.0149254 , 0.015625 ] , [ 0.0138889 , 0.047619 ] +i [ 0.0333333 , 0 ] , [ 0.0136986 , 0.0666667 ] ] 276 [ [ 0 , 0.0253165 ] , [ 0.142857 , 0.0357143 ] +i [ 0.142857 , 0 ] , [ 0.0277778 , 0.0714286 ] ] 277 [ [ 0.166667 , 0.0740741 ] , [ 0.0208333 , 0.0104167 ] +i [ 0.142857 , -0.142857 ] , [ 0.0140845 , 0.0333333 ] ] 278 [ [ 0 , 0.0116279 ] , [ 0.030303 , 0.0138889 ] +i [ 0.0222222 , 125 ] , [ 0.0277778 , 0.0113636 ] ] 279 [ [ 0.0166667 , 0.0333333 ] , [ 0.0172414 , 0.0229885 ] +i [ 0.1 , -0.0151515 ] , [ 0.0114943 , 0.1 ] ] 280 [ [ -0.0833333 , 0.0126582 ] , [ 0.0266667 , 0.0208333 ] +i [ 0.0454545 , 0.0133333 ] , [ 0.0588235 , 0.08 ] ] 281 [ [ 1 , 0.0169492 ] , [ 0.0104167 , 0.0869565 ] +i [ 0.0119048 , 0 ] , [ 0.25 , 0.0606061 ] ] 282 [ [ 0 , 0.016129 ] , [ 0.047619 , 0.0344828 ] +i [ 0.0350877 , 0 ] , [ 0.0606061 , 0.0107527 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 207 283 [ [ 0.0147059 , 0.0307692 ] , [ 0.133333 , 0.0212766 ] +i [ 0.010989 , -0.0384615 ] , [ 0.0178571 , 0.015625 ] ] 284 [ [ 0 , 0.0125 ] , [ 0.0217391 , 0.0149254 ] +i [ 0.0113636 , -0.111111 ] , [ 0.037037 , 0.0384615 ] ] 285 [ [ 0 , 0.0163934 ] , [ 0.0384615 , 0.111111 ] +i [ 0.0253165 , 0 ] , [ 0.0111111 , 0.04 ] ] 286 [ [ 0 , 0.0833333 ] , [ 0.05 , 0.1 ] +i [ 0.0714286 , 0.0263158 ] , [ 0.0114943 , 0.117647 ] ] 287 [ [ 0 , 0.0126582 ] , [ 0.012987 , 0.0169492 ] +i [ 0.0377358 , -0.0212766 ] , [ 0.0263158 , 0.0625 ] ] 288 [ [ 0.02 , 0.015873 ] , [ 0.0588235 , 0.04 ] +i [ 0.0666667 , 0 ] , [ 0.0235294 , 0.0136986 ] ] 289 [ [ -0.01 , 0.0333333 ] , [ 0.0357143 , 0.111111 ] +i [ 0.0444444 , 0 ] , [ 0.0454545 , 0.04 ] ] 290 [ [ 0.037037 , 0.0263158 ] , [ 0.0133333 , 0.0232558 ] +i [ 0.5 , 0.0434783 ] , [ 0.222222 , 0.0104167 ] ] 291 [ [ 0 , 0.0363636 ] , [ 0.0869565 , 0.025974 ] +i [ 0.0263158 , -0.0588235 ] , [ 0.25 , 0.021978 ] ] 292 [ [ 0 , 0.0181818 ] , [ 0.0666667 , 0.0571429 ] +i [ 0.0512821 , -0.0133333 ] , [ 0.0740741 , 0.03125 ] ] 293 [ [ 0.012987 , 0.0208333 ] , [ 0.0125 , 0.016129 ] +i [ 0.0222222 , 0 ] , [ 0.0322581 , 0.25 ] ] 294 [ [ 0 , 0.0277778 ] , [ 0.0333333 , 0.0588235 ] +i [ 0.030303 , 0 ] , [ 0.0338983 , 0.02 ] ] 295 [ [ -0.0232558 , 0.0217391 ] , [ 0.011236 , 0.0512821 ] +i [ 0.0307692 , 0.2 ] , [ 0.0128205 , 0.037037 ] ] 296 [ [ 0 , 0.0555556 ] , [ 0.010989 , 0.0425532 ] +i [ 0.0344828 , 0.0178571 ] , [ 0.2 , 0.047619 ] ] 297 [ [ -25 , 0.016129 ] , [ 0.0416667 , 0.166667 ] +i [ 0.010989 , -0.0142857 ] , [ 0.0166667 , 0.0344828 ] ] 298 [ [ 0.0153846 , 0.0217391 ] , [ 0.0769231 , 0.181818 ] +i [ 0.010101 , 0.0588235 ] , [ 0.0123457 , 125 ] ] 299 [ [ 0 , 0.166667 ] , [ 0.0113636 , 0.030303 ] +i [ 0.025641 , -0.0151515 ] , [ 0.0307692 , 0.105263 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 208 300 [ [ 0 , 0.0285714 ] , [ 0.0444444 , 0.015873 ] +i [ 0.0142857 , 0.02 ] , [ 0.105263 , 0.0147059 ] ] 301 [ [ 0 , 1 ] , [ 0.0289855 , 0.0833333 ] +i [ 0.0208333 , -0.0103093 ] , [ 0.0298507 , 0.0645161 ] ] 302 [ [ 0.0285714 , 0.08 ] , [ 0.0344828 , 0.0163934 ] +i [ 0.0338983 , -0.0384615 ] , [ 0.0147059 , 0.153846 ] ] 303 [ [ 0 , 0.0153846 ] , [ 0.0196078 , 0.0327869 ] +i [ 0.0434783 , -0.0147059 ] , [ 0.0363636 , 0.0113636 ] ] 304 [ [ -0.0121951 , 0.0142857 ] , [ 0.0229885 , 0.0322581 ] +i [ 0.2 , -0.0243902 ] , [ 0.0909091 , 0.1 ] ] 305 [ [ 0.02 , 0.027027 ] , [ 0.0333333 , 0.0392157 ] +i [ 0.0344828 , -0.166667 ] , [ 0.030303 , 0.0571429 ] ] 306 [ [ 0.0181818 , 0.0128205 ] , [ 0.0163934 , 0.166667 ] +i [ 0.037037 , -0.0108696 ] , [ 0.015873 , 0.025974 ] ] 307 [ [ 0.0526316 , 0.0454545 ] , [ 0.016129 , 0.0222222 ] +i [ 0.0166667 , 0.0149254 ] , [ 0.0116279 , 0.05 ] ] 308 [ [ 0.0169492 , 0.020202 ] , [ 0.0215054 , 0.117647 ] +i [ 0.0120482 , 0 ] , [ 0.0588235 , 0.0166667 ] ] 309 [ [ 0 , 0.0128205 ] , [ 0.142857 , 0.0104167 ] +i [ 0.0229885 , -0.25 ] , [ 0.0188679 , 0.105263 ] ] 310 [ [ 0.0294118 , 0.037037 ] , [ 0.0344828 , 0.0526316 ] +i [ 0.047619 , -0.025641 ] , [ 0.0212766 , 0.0206186 ] ] 311 [ [ 0 , 0.05 ] , [ 0.0117647 , 0.0833333 ] +i [ 0.02 , 0 ] , [ 0.04 , 0.0465116 ] ] 312 [ [ 0.0169492 , 2 ] , [ 0.0338983 , 0.142857 ] +i [ 0.025641 , 0 ] , [ 0.0952381 , 0.0149254 ] ] 313 [ [ 0 , 0.0238095 ] , [ 0.0224719 , 0.05 ] +i [ 0.0212766 , -0.010989 ] , [ 0.0131579 , 0.0285714 ] ] 314 [ [ 0 , 0.047619 ] , [ 0.0526316 , 1 ] +i [ 0.0606061 , -0.0131579 ] , [ 0.0540541 , 0.025641 ] ] 315 [ [ 0.01 , 0.028169 ] , [ 0.0540541 , 0.0243902 ] +i [ 0.028169 , 0.02 ] , [ 0.0408163 , 0.025641 ] ] 316 [ [ 0 , 0.012987 ] , [ 0.0666667 , 0.0625 ] +i [ 0.0222222 , 0.0232558 ] , [ 0.0294118 , 2 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 209 317 [ [ 0.0217391 , 0.0625 ] , [ 0.02 , 0.05 ] +i [ 0.02 , 0.0131579 ] , [ 0.01 , 0.03125 ]] 318 [ [ 0.0135135 , 0.0434783 ] , [ 0.0140845 , 0.0119048 ] +i [ 0.111111 , 0 ] , [ 0.0188679 , 0.08 ] ] 319 [ [ -0.0147059 , 0.0666667 ] , [ 0.0123457 , 0.0338983 ] +i [ 0.0169492 , 0 ] , [ 0.111111 , 0.0833333 ] ] 320 [ [ 0 , 1 ] , [ 0.0153846 , 0.0131579 ] +i [ 0.0117647 , 0 ] , [ 0.0833333 , 0.285714 ]] 321 [ [ 0.0909091 , 0.0769231 ] , [ 0.0208333 , 0.0212766 ] +i [ 0.0333333 , 0 ] , [ 0.0138889 , 0.0175439 ] ] 322 [ [ 0.0285714 , 0.0266667 ] , [ 0.0454545 , 0.0666667 ] +i [ 0.027027 , -0.015625 ] , [ 0.117647 , 0.0169492 ] ] 323 [ [ 0.0153846 , 0.08 ] , [ 2 , 0.0263158 ] +i [ 0.0526316 , 0 ] , [ 1 , 0.04 ] ] 324 [ [ 0 , 0.285714 ] , [ 0.0263158 , 0.0138889 ] +i [ 0.010989 , -0.0117647 ] , [ 0.05 , 0.0125 ] ] 325 [ [ 0 , 0.0149254 ] , [ 0.0869565 , 0.0344828 ] +i [ 0.0185185 , -0.0138889 ] , [ 0.0178571 , 0.0111111 ] ] 326 [ [ 0 , 0.111111 ] , [ 0.0215054 , 0.0645161 ] +i [ 0.105263 , 0.0204082 ] , [ 0.0350877 , 0.021978 ] ] 327 [ [ 0 , 0.0625 ] , [ 0.0107527 , 0.0555556 ] +i [ 0.037037 , 0 ] , [ 0.0123457 , 0.0588235 ] ] 328 [ [ -0.0138889 , 0.285714 ] , [ 0.0217391 , 0.0140845 ] +i [ 125 , -0.0104167 ] , [ 0.0454545 , 0.015625 ] ] 329 [ [ -0.0192308 , 0.0869565 ] , [ 0.0344828 , 0.0645161 ] +i [ 0.0333333 , -0.04 ] , [ 0.01 , 0.037037 ] ] 330 [ [ 0.0131579 , 0.0714286 ] , [ 0.666667 , 0.0338983 ] +i [ 0.666667 , -0.0185185 ] , [ 0.02 , 0.0338983 ] ] 331 [ [ -0.0227273 , 0.0113636 ] , [ 0.0238095 , 0.037037 ] +i [ 0.0645161 , 0 ] , [ 0.0952381 , 0.0277778 ] ] 332 [ [ 0.0120482 , 0.0105263 ] , [ 0.0869565 , 0.027027 ] +i [ 0.021978 , 0.0625 ] , [ 0.0188679 , 0.0363636 ] ] 333 [ [ 0 , 0.0227273 ] , [ 0.0454545 , 0.0416667 ] +i [ 0.0117647 , -0.0111111 ] , [ 0.0144928 , 0.0224719 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 210 334 [ [ -0.011236 , 0.0240964 ] , [ 0.0444444 , 0.0232558 ] +i [ 0.0408163 , 0.027027 ] , [ 0.0185185 , 0.04 ] ] 335 [ [ 0 , 0.04 ] , [ 0.0126582 , 0.0232558 ] +i [ 0.25 , -0.0121951 ] , [ 0.025641 , 0.0196078 ] ] 336 [ [ 0 , 0.0377358 ] , [ 0.015873 , 0.0909091 ] +i [ 0.0294118 , 0 ] , [ 0.0151515 , 0.0333333 ] ] 337 [ [ 0 , 0.0232558 ] , [ 0.0434783 , 0.5 ] +i [ 0.0322581 , 0 ] , [ 0.0238095 , 0.0196078 ] ] 338 [ [ -0.0909091 , 0.0344828 ] , [ 0.028169 , 0.0909091 ] +i [ 0.0103093 , 0 ] , [ 0.0666667 , 0.02 ] ] 339 [ [ 0.0104167 , 0.0104167 ] , [ 0.0192308 , 0.0149254 ] +i [ 0.0238095 , 0.0909091 ] , [ 0.0338983 , 0.0273973 ] ] 340 [ [ 0.0113636 , 0.0131579 ] , [ 0.021978 , 0.0384615 ] +i [ 0.0833333 , 0.0147059 ] , [ 0.0240964 , 0.0238095 ] ] 341 [ [ 0 , 0.0327869 ] , [ 0.333333 , 0.166667 ] +i [ 0.0215054 , 0 ] , [ 0.0392157 , 0.0588235 ] ] 342 [ [ -0.0120482 , 0.0487805 ] , [ 0.0204082 , 0.0357143 ] +i [ 0.25 , 0.02 ] , [ 0.0217391 , 0.0327869 ] ] 343 [ [ 0.011236 , 0.0625 ] , [ 0.04 , 125 ] +i [ 0.0384615 , 0 ] , [ 0.0238095 , 0.0142857 ] ] 344 [ [ 0.016129 , 0.166667 ] , [ 0.0147059 , 0.030303 ] +i [ 0.0243902 , 0 ] , [ 0.0178571 , 0.0344828 ] ] 345 [ [ -0.0666667 , 0.2 ] , [ 0.0204082 , 0.0151515 ] +i [ 0.0454545 , 0 ] , [ 0.0263158 , 0.0238095 ] ] 346 [ [ 0.0333333 , 0.0224719 ] , [ 0.0149254 , 0.117647 ] +i [ 0.0175439 , 0.0123457 ] , [ 0.0666667 , 0.0263158 ] ] 347 [ [ -0.0125 , 0.0377358 ] , [ 0.0240964 , 0.0689655 ] +i [ 0.0149254 , 0 ] , [ 0.0212766 , 0.0338983 ] ] 348 [ [ -0.0294118 , 0.0952381 ] , [ 0.25 , 0.0136986 ] +i [ 0.0952381 , 0 ] , [ 0.0185185 , 0.04 ] ] 349 [ [ 0.25 , 0.037037 ] , [ 0.0689655 , 0.0125 ] +i [ 0.0444444 , -0.25 ] , [ 0.04 , 0.0588235 ] ] 350 [ [ 0.0169492 , 0.015625 ] , [ 0.016129 , 0.0151515 ] +i [ 0.01 , -0.0192308 ] , [ 0.0526316 , 0.0243902 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 211 351 [ [ 0 , 0.0434783 ] , [ 0.0175439 , 0.0294118 ] +i [ 0.0327869 , 0 ] , [ 0.0454545 , 0.0571429 ] ] 352 [ [ -0.0277778 , 0.0384615 ] , [ 0.0327869 , 0.020202 ] +i [ 0.0138889 , 0 ] , [ 0.0210526 , 0.0117647 ] ] 353 [ [ 0 , 0.111111 ] , [ 0.0606061 , 0.0408163 ] +i [ 0.181818 , 0.0104167 ] , [ 0.05 , 0.0408163 ] ] 354 [ [ -0.015873 , 0.0571429 ] , [ 0.0235294 , 0.0128205 ] +i [ 0.153846 , 0.0238095 ] , [ 0.4 , 0.0103093 ] ] 355 [ [ 0.0172414 , 0.0210526 ] , [ 0.0740741 , 0.0253165 ] +i [ 0.0217391 , 0.0344828 ] , [ 0.333333 , 0.02 ] ] 356 [ [ 0 , 0.0294118 ] , [ 0.04 , 0.025974 ] +i [ 0.0357143 , -0.0232558 ] , [ 0.0408163 , 0.25 ] ] 357 [ [ -0.0114943 , 0.037037 ] , [ 0.0144928 , 0.0377358 ] +i [ 0.0126582 , 0 ] , [ 0.0121951 , 0.0104167 ] ] 358 [ [ 0.0833333 , 0.0363636 ] , [ 0.0273973 , 0.222222 ] +i [ 0.0350877 , 0.0138889 ] , [ 0.0416667 , 0.5 ] ] 359 [ [ -0.01 , 0.0555556 ] , [ 0.0107527 , 0.030303 ] +i [ 0.025974 , -0.0147059 ] , [ 0.5 , 0.0147059 ] ] 360 [ [ -0.0133333 , 0.0769231 ] , [ 0.0625 , 0.0222222 ] +i [ 0.0740741 , -0.0208333 ] , [ 0.01 , 0.0222222 ] ] 361 [ [ -0.0181818 , 0.0357143 ] , [ 0.0322581 , 0.0188679 ] +i [ 0.0103093 , 0.0212766 ] , [ 0.0238095 , 0.0204082 ] ] 362 [ [ 0.01 , 0.0606061 ] , [ 0.0227273 , 0.333333 ] +i [ 0.0285714 , -0.0120482 ] , [ 0.0111111 , 0.0526316 ] ] 363 [ [ 0 , 0.0106383 ] , [ 0.0138889 , 0.02 ] +i [ 0.010989 , 0 ] , [ 0.0128205 , 0.166667 ] ] 364 [ [ -0.0166667 , 0.0192308 ] , [ 0.0117647 , 0.0526316 ] +i [ 125 , 0 ] , [ 0.0243902 , 0.0133333 ] ] 365 [ [ 0.0138889 , 0.0212766 ] , [ 0.0196078 , 0.015625 ] +i [ 0.016129 , -0.0212766 ] , [ 0.0169492 , 0.0105263 ] ] 366 [ [ 0 , 0.05 ] , [ 0.0555556 , 0.0588235 ] +i [ 0.0714286 , -0.0277778 ] , [ 0.0107527 , 0.105263 ] ] 367 [ [ 0 , 0.166667 ] , [ 0.0740741 , 1 ] +i [ 0.0135135 , -0.142857 ] , [ 0.0123457 , 0.0212766 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 212 368 [ [ 0 , 0.031746 ] , [ 0.333333 , 0.0144928 ] +i [ 0.0133333 , -0.0188679 ] , [ 0.0408163 , 0.0555556 ] ] 369 [ [ 0 , 0.0140845 ] , [ 0.0217391 , 0.0217391 ] +i [ 0.0235294 , 0.0666667 ] , [ 0.0116279 , 0.0125 ] ] 370 [ [ -0.333333 , 0.0224719 ] , [ 0.01 , 0.0769231 ] +i [ 0.0103093 , 0.0142857 ] , [ 0.03125 , 0.133333 ] ] 371 [ [ 0 , 0.0185185 ] , [ 0.166667 , 0.0238095 ] +i [ 0.0147059 , 0.015873 ] , [ 0.0357143 , 0.0243902 ] ] 372 [ [ 0.0107527 , 0.0227273 ] , [ 0.030303 , 0.0526316 ] +i [ 0.0555556 , 0.0263158 ] , [ 0.01 , 0.01 ] ] 373 [ [ 0 , 0.0131579 ] , [ 0.0107527 , 0.0909091 ] +i [ 0.0322581 , -0.030303 ] , [ 0.0689655 , 0.0434783 ] ] 374 [ [ -0.0204082 , 0.0769231 ] , [ 0.05 , 0.0909091 ] +i [ 0.0243902 , 0.0243902 ] , [ 0.0298507 , 0.0243902 ] ] 375 [ [ 0 , 0.5 ] , [ 0.012987 , 0.0243902 ] +i [ 0.0833333 , -0.0133333 ] , [ 0.0181818 , 0.0142857 ] ] 376 [ [ -0.0113636 , 0.0135135 ] , [ 0.03125 , 0.4 ] +i [ 0.0238095 , 0.0108696 ] , [ 0.0869565 , 0.181818 ] ] 377 [ [ -0.0555556 , 0.0232558 ] , [ 0.025641 , 0.0833333 ] +i [ 0.0136986 , 0.0344828 ] , [ 0.0555556 , 0.02 ] ] 378 [ [ -0.0102041 , 0.2 ] , [ 0.012987 , 0.153846 ] +i [ 0.0108696 , 0.0106383 ] , [ 0.2 , 0.047619 ] ] 379 [ [ 0 , 0.0232558 ] , [ 0.0952381 , 0.0114943 ] +i [ 0.0425532 , 0.0153846 ] , [ 0.0114943 , 0.0138889 ] ] 380 [ [ -0.0135135 , 0.0121951 ] , [ 0.0212766 , 0.0344828 ] +i [ 0.0232558 , 0 ] , [ 0.0392157 , 0.0606061 ] ] 381 [ [ -0.0204082 , 0.2 ] , [ 0.0113636 , 0.0104167 ] +i [ 0.0434783 , 0.0769231 ] , [ 0.05 , 0.0277778 ] ] 382 [ [ -0.047619 , 0.0769231 ] , [ 0.025641 , 0.0416667 ] +i [ 0.0136986 , 0 ] , [ 0.0116279 , 0.0229885 ] ] 383 [ [ 0.0131579 , 0.0277778 ] , [ 0.02 , 0.117647 ] +i [ 0.010989 , -0.0147059 ] , [ 0.285714 , 0.0909091 ] ] 384 [ [ -0.0120482 , 0.0120482 ] , [ 0.333333 , 0.015873 ] +i [ 0.0222222 , 0 ] , [ 0.0140845 , 0.0465116 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 213 385 [ [ 0.0263158 , 0.0133333 ] , [ 0.0128205 , 0.0363636 ] +i [ 0.0666667 , 0.0120482 ] , [ 0.0384615 , 0.0285714 ] ] 386 [ [ 0.1 , 0.0116279 ] , [ 0.015873 , 0.0333333 ] +i [ 0.0327869 , -0.0526316 ] , [ 0.027027 , 0.0125 ] ] 387 [ [ -0.0111111 , 0.030303 ] , [ 0.0289855 , 0.0117647 ] +i [ 0.016129 , 0 ] , [ 0.0114943 , 0.0298507 ] ] 388 [ [ 0 , 0.0144928 ] , [ 0.0117647 , 0.0555556 ] +i [ 0.0307692 , -0.0588235 ] , [ 0.0666667 , 0.0298507 ] ] 389 [ [ -0.0344828 , 0.047619 ] , [ 0.0357143 , 0.0204082 ] +i [ 0.0192308 , 0.0121951 ] , [ 0.0277778 , 0.0769231 ] ] 390 [ [ 0 , 0.0204082 ] , [ 0.0147059 , 0.0363636 ] +i [ 0.0128205 , -0.010989 ] , [ 0.0204082 , 0.0350877 ] ] 391 [ [ -0.0111111 , 0.0294118 ] , [ 0.047619 , 0.0163934 ] +i [ 0.0208333 , 0 ] , [ 0.0240964 , 0.285714 ] ] 392 [ [ -0.02 , 0.0416667 ] , [ 0.166667 , 0.0243902 ] +i [ 0.0107527 , 0 ] , [ 0.0140845 , 0.05 ] ] 393 [ [ 0 , 0.222222 ] , [ 0.0126582 , 0.025641 ] +i [ 0.0416667 , 0.166667 ] , [ 0.166667 , 0.0106383 ] ] 394 [ [ -0.0277778 , 0.0540541 ] , [ 0.153846 , 0.0133333 ] +i [ 0.0588235 , 0.0243902 ] , [ 0.5 , 0.0238095 ] ] 395 [ [ 0 , 0.0333333 ] , [ 0.0243902 , 0.0289855 ] +i [ 0.0240964 , -0.0204082 ] , [ 0.0149254 , 0.021978 ] ] 396 [ [ 0.011236 , 0.25 ] , [ 0.01 , 0.0322581 ] +i [ 0.0131579 , -0.25 ] , [ 25 , 0.0210526 ] ] 397 [ [ -0.02 , 0.142857 ] , [ 0.0377358 , 0.028169 ] +i [ 0.0126582 , -0.0149254 ] , [ 0.4 , 0.0588235 ] ] 398 [ [ 0.0277778 , 0.0263158 ] , [ 0.0149254 , 0.0666667 ] +i [ 0.0178571 , 0 ] , [ 0.0212766 , 0.0240964 ] ] 399 [ [ 0 , 0.0238095 ] , [ 0.0769231 , 0.0133333 ] +i [ 0.08 , 0 ] , [ 0.015625 , 0.04 ] ] 400 [ [ -0.0714286 , 0.0142857 ] , [ 0.0131579 , 0.05 ] +i [ 0.0103093 , 0 ] , [ 0.0138889 , 0.0144928 ] ] 401 [ [ 0 , 0.0333333 ] , [ 0.25 , 0.285714 ] +i [ 0.0217391 , 0 ] , [ 0.0206186 , 0.0238095 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 214 402 [ [ -0.0102041 , 0.0217391 ] , [ 0.0588235 , 0.04 ] +i [ 125 , 0.0526316 ] , [ 0.0227273 , 0.0224719 ] ] 403 [ [ -0.05 , 0.0714286 ] , [ 0.0169492 , 0.0540541 ] +i [ 0.0263158 , 0 ] , [ 0.012987 , 0.01 ] ] 404 [ [ 0 , 0.0540541 ] , [ 0.0119048 , 0.0606061 ] +i [ 0.0224719 , 0 ] , [ 0.166667 , 0.028169 ] ] 405 [ [ 0.333333 , 0.0363636 ] , [ 0.25 , 0.0105263 ] +i [ 0.031746 , -0.0151515 ] , [ 0.0181818 , 2 ] ] 406 [ [ -0.010101 , 0.0192308 ] , [ 0.02 , 0.5 ] +i [ 0.0232558 , -0.0123457 ] , [ 0.117647 , 0.021978 ] ] 407 [ [ -0.0163934 , 0.0357143 ] , [ 0.0136986 , 0.0111111 ] +i [ 0.0169492 , 0.0188679 ] , [ 0.0333333 , 0.0487805 ] ] 408 [ [ 0 , 0.0175439 ] , [ 0.0384615 , 0.0108696 ] +i [ 0.0571429 , -0.03125 ] , [ 0.0434783 , 0.0125 ] ] 409 [ [ 0.0151515 , 0.0357143 ] , [ 0.0133333 , 0.0163934 ] +i [ 0.01 , -0.0232558 ] , [ 0.0357143 , 0.0212766 ] ] 410 [ [ 0 , 0.011236 ] , [ 0.0204082 , 0.0377358 ] +i [ 0.0263158 , -0.0196078 ] , [ 0.0253165 , 0.0178571 ] ] 411 [ [ 0 , 0.0243902 ] , [ 0.142857 , 0.0111111 ] +i [ 0.0909091 , 0.011236 ] , [ 0.015625 , 0.047619 ] ] 412 [ [ 0.0120482 , 0.0384615 ] , [ 0.04 , 0.0526316 ] +i [ 0.333333 , -0.047619 ] , [ 0.0166667 , 0.011236 ] ] 413 [ [ 0 , 0.0588235 ] , [ 0.0740741 , 0.0229885 ] +i [ 0.666667 , -0.0263158 ] , [ 0.5 , 1 ] ] 414 [ [ -0.010989 , 0.0169492 ] , [ 0.0235294 , 0.0909091 ] +i [ 0.285714 , 0 ] , [ 0.0113636 , 0.0277778 ] ] 415 [ [ 0.0263158 , 0.0192308 ] , [ 125 , 0.2 ] +i [ 0.0232558 , 0.0294118 ] , [ 0.0153846 , 0.4 ] ] 416 [ [ -0.012987 , 0.011236 ] , [ 0.0333333 , 0.0204082 ] +i [ 0.0487805 , 0 ] , [ 1 , 0.0227273 ] ] 417 [ [ 0.0188679 , 0.0384615 ] , [ 0.133333 , 0.01 ] +i [ 0.0588235 , 0 ] , [ 0.0571429 , 0.02 ] ] 418 [ [ -0.0217391 , 0.0151515 ] , [ 0.166667 , 0.0555556 ] +i [ 0.0833333 , 0.015625 ] , [ 0.0909091 , 0.142857 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 215 419 [ [ -0.0333333 , 0.333333 ] , [ 0.0769231 , 0.0166667 ] +i [ 0.037037 , 125 ] , [ 0.142857 , 0.0454545 ] ] 420 [ [ -0.0263158 , 0.0222222 ] , [ 0.0126582 , 0.0338983 ] +i [ 0.0117647 , 0.025641 ] , [ 0.0238095 , 0.025641 ] ] 421 [ [ -0.02 , 0.4 ] , [ 0.0212766 , 0.153846 ] +i [ 0.2 , 0.0217391 ] , [ 0.0769231 , 0.0444444 ] ] 422 [ [ -0.0277778 , 0.0322581 ] , [ 0.0425532 , 0.0606061 ] +i [ 0.0119048 , 0 ] , [ 0.05 , 0.0246914 ] ] 423 [ [ -0.01 , 0.03125 ] , [ 0.0222222 , 0.0454545 ] +i [ 0.333333 , 0 ] , [ 0.0714286 , 0.0571429 ] ] 424 [ [ -0.0104167 , 0.0526316 ] , [ 0.03125 , 0.0357143 ] +i [ 0.0384615 , 0.0192308 ] , [ 0.021978 , 0.0377358 ] ] 425 [ [ 0.0136986 , 0.5 ] , [ 0.0126582 , 0.0227273 ] +i [ 0.0125 , 1 ] , [ 0.0625 , 0.1 ]] 426 [ [ 0 , 0.0217391 ] , [ 0.0253165 , 0.0227273 ] +i [ 0.016129 , -0.0454545 ] , [ 0.0526316 , 0.020202 ] ] 427 [ [ 0.0144928 , 0.04 ] , [ 0.0196078 , 0.0425532 ] +i [ 0.0232558 , 0 ] , [ 0.0357143 , 0.0333333 ] ] 428 [ [ -1 , 0.0307692 ] , [ 0.0588235 , 0.0384615 ] +i [ 0.0243902 , -0.0384615 ] , [ 0.08 , 0.0212766 ] ] 429 [ [ 0 , 0.0188679 ] , [ 0.05 , 0.028169 ] +i [ 0.0147059 , 0 ] , [ 0.0266667 , 0.0227273 ] ] 430 [ [ 0 , 0.666667 ] , [ 0.047619 , 0.4 ] +i [ 0.027027 , -0.0294118 ] , [ 0.0188679 , 0.166667 ] ] 431 [ [ -0.142857 , 0.0102041 ] , [ 0.142857 , 0.0138889 ] +i [ 0.0114943 , 0.015873 ] , [ 0.021978 , 0.0117647 ] ] 432 [ [ 0 , 0.25 ] , [ 25 , 0.020202 ] +i [ 0.0294118 , -0.0217391 ] , [ 0.5 , 0.0645161 ]] 433 [ [ 0.0114943 , 0.0204082 ] , [ 0.08 , 0.0215054 ] +i [ 0.0526316 , 1 ] , [ 0.0444444 , 0.0625 ] ] 434 [ [ 0.0151515 , 0.0138889 ] , [ 0.0869565 , 0.0322581 ] +i [ 0.0217391 , 0.0188679 ] , [ 0.0192308 , 0.0833333 ] ] 435 [ [ -0.01 , 0.037037 ] , [ 0.0769231 , 0.0240964 ] +i [ 0.012987 , -0.0172414 ] , [ 0.0111111 , 0.0107527 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 216 436 [ [ 0.0294118 , 0.047619 ] , [ 0.0217391 , 0.0333333 ] +i [ 0.0144928 , 0.0238095 ] , [ 0.031746 , 0.0285714 ] ] 437 [ [ 0.0117647 , 0.0151515 ] , [ 0.0588235 , 0.0666667 ] +i [ 0.0714286 , 0.0181818 ] , [ 0.0344828 , 0.1 ] ] 438 [ [ 0.0153846 , 0.0204082 ] , [ 0.010989 , 0.0285714 ] +i [ 0.0222222 , -0.01 ] , [ 0.0454545 , 0.0357143 ] ] 439 [ [ 0 , 0.0227273 ] , [ 0.0123457 , 0.0232558 ] +i [ 0.0307692 , 0.0285714 ] , [ 0.025974 , 125 ] ] 440 [ [ -0.0238095 , 0.0714286 ] , [ 0.0206186 , 0.0333333 ] +i [ 0.04 , 0.01 ] , [ 0.037037 , 1 ] ] 441 [ [ -0.047619 , 0.0206186 ] , [ 0.05 , 0.0126582 ] +i [ 0.025641 , -0.0238095 ] , [ 0.25 , 0.285714 ] ] 442 [ [ -0.0116279 , 0.05 ] , [ 0.010101 , 0.027027 ] +i [ 0.0512821 , -0.0625 ] , [ 0.666667 , 0.0238095 ] ] 443 [ [ -0.0204082 , 0.0120482 ] , [ 0.0625 , 0.0277778 ] +i [ 0.021978 , 0.0769231 ] , [ 0.0350877 , 0.666667 ] ] 444 [ [ 0 , 0.105263 ] , [ 0.0512821 , 0.04 ] +i [ 0.028169 , -0.0119048 ] , [ 0.0434783 , 0.0689655 ] ] 445 [ [ 0.0140845 , 0.0416667 ] , [ 0.0714286 , 0.0114943 ] +i [ 0.0235294 , -0.1 ] , [ 0.0285714 , 2 ] ] 446 [ [ 1 , 0.0555556 ] , [ 0.0119048 , 0.0714286 ] +i [ 0.02 , -0.016129 ] , [ 0.010989 , 0.0555556 ] ] 447 [ [ -0.0357143 , 25 ] , [ 0.02 , 0.5 ] +i [ 125 , -0.0104167 ] , [ 0.05 , 0.0117647 ] ] 448 [ [ 0 , 0.0263158 ] , [ 0.0142857 , 0.2 ] +i [ 0.010989 , -0.0227273 ] , [ 0.0172414 , 0.0344828 ] ] 449 [ [ 0 , 0.0123457 ] , [ 0.0125 , 0.0243902 ] +i [ 125 , 0.05 ] , [ 0.025641 , 0.0384615 ] ] 450 [ [ 0.5 , 0.0526316 ] , [ 0.0307692 , 0.1 ] +i [ 0.25 , 0 ] , [ 0.0392157 , 0.0238095 ]] 451 [ [ -0.1 , 0.0243902 ] , [ 0.0625 , 0.0140845 ] +i [ 0.0181818 , -0.0277778 ] , [ 0.5 , 0.0217391 ] ] 452 [ [ 0 , 0.0322581 ] , [ 0.030303 , 0.0277778 ] +i [ 0.0555556 , -0.0217391 ] , [ 0.0454545 , 0.105263 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 217 453 [ [ 0 , 0.0277778 ] , [ 0.025641 , 0.0263158 ] +i [ 0.166667 , -0.0196078 ] , [ 0.0232558 , 0.0181818 ] ] 454 [ [ 0 , 0.0294118 ] , [ 0.2 , 0.181818 ] +i [ 0.0273973 , 0.0188679 ] , [ 0.0266667 , 0.025641 ] ] 455 [ [ -0.015873 , 0.0357143 ] , [ 0.0357143 , 0.133333 ] +i [ 0.0119048 , 0.0263158 ] , [ 0.030303 , 0.02 ] ] 456 [ [ -0.0120482 , 0.0224719 ] , [ 0.04 , 0.0285714 ] +i [ 0.0588235 , -0.25 ] , [ 0.0384615 , 0.0434783 ] ] 457 [ [ -0.05 , 0.0512821 ] , [ 0.0625 , 0.0151515 ] +i [ 0.037037 , 0 ] , [ 0.015625 , 0.0253165 ] ] 458 [ [ 0 , 0.03125 ] , [ 25 , 25 ] +i [ 0.0188679 , -0.0322581 ] , [ 0.0133333 , 0.0243902 ] ] 459 [ [ 0 , 0.02 ] , [ 0.0144928 , 0.0232558 ] +i [ 0.0571429 , 0.0178571 ] , [ 0.0444444 , 0.0222222 ] ] 460 [ [ 0.0294118 , 0.0117647 ] , [ 0.1 , 0.030303 ] +i [ 0.0487805 , 0 ] , [ 0.0140845 , 0.0204082 ] ] 461 [ [ 0 , 0.02 ] , [ 0.0392157 , 0.0322581 ] +i [ 0.0103093 , -0.2 ] , [ 0.03125 , 0.333333 ] ] 462 [ [ 0 , 0.117647 ] , [ 0.0344828 , 0.0229885 ] +i [ 0.0298507 , 0 ] , [ 0.0227273 , 0.0273973 ] ] 463 [ [ 0 , 0.0238095 ] , [ 0.037037 , 0.0416667 ] +i [ 0.0689655 , -0.0108696 ] , [ 0.0204082 , 0.01 ] ] 464 [ [ 0 , 0.0298507 ] , [ 0.0416667 , 0.0714286 ] +i [ 0.0869565 , 0 ] , [ 0.0133333 , 0.011236 ] ] 465 [ [ 0 , 0.047619 ] , [ 0.0111111 , 0.010101 ] +i [ 0.0102041 , 0.0149254 ] , [ 0.0163934 , 0.0108696 ] ] 466 [ [ 0 , 0.037037 ] , [ 125 , 0.0212766 ] +i [ 0.0833333 , 0 ] , [ 0.04 , 0.105263 ] ] 467 [ [ 0 , 0.0208333 ] , [ 0.0322581 , 0.02 ] +i [ 2 , 0 ] , [ 0.0210526 , 0.0322581 ] ] 468 [ [ 0 , 0.016129 ] , [ 0.0384615 , 0.181818 ] +i [ 0.0128205 , 0.012987 ] , [ 25 , 0.0869565 ] ] 469 [ [ 0.0102041 , 0.222222 ] , [ 0.047619 , 0.0121951 ] +i [ 0.0350877 , 0 ] , [ 0.04 , 0.0217391 ] ] 470 [ [ -0.0217391 , 0.0392157 ] , [ 0.02 , 0.0384615 ] +i [ 0.0243902 , 0.010101 ] , [ 0.0434783 , 0.0263158 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 218 471 [ [ -0.0217391 , 0.0625 ] , [ 0.01 , 0.020202 ] +i [ 0.0133333 , 0.0113636 ] , [ 0.0333333 , 0.015873 ] ] 472 [ [ -0.0144928 , 0.04 ] , [ 0.0206186 , 0.0232558 ] +i [ 0.0416667 , 0.0103093 ] , [ 0.0555556 , 0.0833333 ] ] 473 [ [ -0.0192308 , 0.0384615 ] , [ 0.2 , 0.0444444 ] +i [ 0.0454545 , 0.0163934 ] , [ 0.0833333 , 0.0434783 ] ] 474 [ [ -0.2 , 0.0714286 ] , [ 0.0123457 , 0.333333 ] +i [ 0.0120482 , 0 ] , [ 0.133333 , 0.0769231 ] ] 475 [ [ -0.04 , 0.0153846 ] , [ 0.047619 , 0.0740741 ] +i [ 0.0114943 , 0.0277778 ] , [ 0.0588235 , 0.0384615 ] ] 476 [ [ 0.25 , 0.0714286 ] , [ 0.0952381 , 0.333333 ] +i [ 0.0714286 , -0.0263158 ] , [ 0.0909091 , 0.0119048 ] ] 477 [ [ 0.0204082 , 0.0571429 ] , [ 0.0833333 , 0.0333333 ] +i [ 0.037037 , 0.0322581 ] , [ 0.222222 , 0.0322581 ] ] 478 [ [ -0.0116279 , 0.2 ] , [ 0.0266667 , 0.047619 ] +i [ 0.0232558 , 0 ] , [ 0.0163934 , 0.0408163 ] ] 479 [ [ 0.0212766 , 0.03125 ] , [ 0.0227273 , 0.028169 ] +i [ 0.0769231 , 0.0117647 ] , [ 0.666667 , 0.0357143 ] ] 480 [ [ -0.0909091 , 0.027027 ] , [ 0.0172414 , 0.1 ] +i [ 0.027027 , -0.0625 ] , [ 0.0289855 , 0.0119048 ] ] 481 [ [ -0.0120482 , 0.016129 ] , [ 0.0147059 , 0.5 ] +i [ 0.0149254 , 0.025641 ] , [ 0.037037 , 0.0212766 ] ] 482 [ [ -0.0217391 , 0.0289855 ] , [ 0.0454545 , 0.0135135 ] +i [ 0.020202 , 0 ] , [ 0.0338983 , 0.05 ] ] 483 [ [ -0.0322581 , 0.0126582 ] , [ 0.0909091 , 0.117647 ] +i [ 0.031746 , 0.0113636 ] , [ 0.222222 , 0.025641 ] ] 484 [ [ -0.0149254 , 0.0232558 ] , [ 0.0238095 , 0.0204082 ] +i [ 0.0212766 , 0.01 ] , [ 0.031746 , 0.142857 ] ] 485 [ [ 0.01 , 0.133333 ] , [ 0.0769231 , 125 ] +i [ 0.0434783 , 0.0357143 ] , [ 0.0107527 , 0.047619 ] ] 486 [ [ -0.0169492 , 0.0212766 ] , [ 0.0111111 , 0.0224719 ] +i [ 0.133333 , 0 ] , [ 0.0289855 , 0.0425532 ] ] 487 [ [ 0 , 0.0454545 ] , [ 125 , 0.028169 ] +i [ 0.04 , 0 ] , [ 0.05 , 0.0188679 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 219 488 [ [ -0.1 , 0.0133333 ] , [ 0.0175439 , 0.0128205 ] +i [ 0.0136986 , 0.027027 ] , [ 0.222222 , 0.0206186 ] ] 489 [ [ 0 , 0.05 ] , [ 0.0144928 , 0.0133333 ] +i [ 0.5 , -0.016129 ] , [ 0.0357143 , 0.0298507 ] ] 490 [ [ 0.0120482 , 0.0416667 ] , [ 0.0103093 , 0.03125 ] +i [ 0.0487805 , 0 ] , [ 0.0277778 , 0.0606061 ] ] 491 [ [ -0.0769231 , 0.027027 ] , [ 0.0105263 , 0.05 ] +i [ 0.037037 , 0 ] , [ 0.0294118 , 0.0120482 ] ] 492 [ [ 0.0196078 , 0.0135135 ] , [ 0.0338983 , 0.333333 ] +i [ 0.025641 , -0.0169492 ] , [ 0.166667 , 0.0121951 ] ] 493 [ [ 0 , 0.0526316 ] , [ 0.0128205 , 0.0243902 ] +i [ 0.030303 , 0.0188679 ] , [ 0.0714286 , 0.0138889 ] ] 494 [ [ -0.04 , 0.0232558 ] , [ 0.0204082 , 0.0215054 ] +i [ 0.027027 , 0 ] , [ 0.0555556 , 0.0666667 ] ] 495 [ [ -0.0147059 , 0.333333 ] , [ 0.0243902 , 0.0289855 ] +i [ 0.0666667 , -0.5 ] , [ 0.0588235 , 0.0210526 ] ] 496 [ [ 0 , 0.0769231 ] , [ 0.0123457 , 0.111111 ] +i [ 0.04 , -0.02 ] , [ 0.0229885 , 0.0266667 ] ] 497 [ [ -0.012987 , 0.0140845 ] , [ 0.031746 , 0.0217391 ] +i [ 0.0344828 , 0 ] , [ 0.0769231 , 0.0103093 ] ] 498 [ [ -0.0128205 , 0.0338983 ] , [ 0.0344828 , 0.0434783 ] +i [ 0.0232558 , 0.025641 ] , [ 0.0163934 , 0.027027 ] ] 499 [ [ 0.030303 , 0.0909091 ] , [ 0.0204082 , 0.0144928 ] +i [ 0.0117647 , -0.047619 ] , [ 0.0217391 , 0.0512821 ] ] 500 [ [ 0 , 0.0210526 ] , [ 0.666667 , 0.0833333 ] +i [ 0.133333 , 0 ] , [ 0.0285714 , 0.0285714 ] ] 501 [ [ 0.025641 , 0.0625 ] , [ 0.03125 , 0.0555556 ] +i [ 0.0555556 , -0.01 ] , [ 0.0384615 , 0.0227273 ] ] 502 [ [ -0.0833333 , 0.0217391 ] , [ 0.222222 , 0.105263 ] +i [ 0.0384615 , 0.0128205 ] , [ 0.0833333 , 0.0377358 ] ] 503 [ [ 0 , 0.0227273 ] , [ 0.03125 , 0.0714286 ] +i [ 0.0224719 , -0.0128205 ] , [ 0.0666667 , 0.0212766 ] ] 504 [ [ 0 , 0.0163934 ] , [ 0.0188679 , 0.333333 ] +i [ 0.0322581 , 0.047619 ] , [ 0.0246914 , 0.047619 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 220 505 [ [ 0.0169492 , 0.0240964 ] , [ 0.4 , 0.0185185 ] +i [ 0.0123457 , 0 ] , [ 0.166667 , 0.142857 ] ] 506 [ [ -0.011236 , 0.0666667 ] , [ 0.333333 , 0.04 ] +i [ 0.142857 , -0.0909091 ] , [ 125 , 0.0277778 ] ] 507 [ [ 0 , 0.0434783 ] , [ 0.25 , 0.0666667 ] +i [ 0.0149254 , -0.0357143 ] , [ 0.0384615 , 2 ] ] 508 [ [ -0.0117647 , 0.0192308 ] , [ 125 , 0.0322581 ] +i [ 0.25 , -0.0208333 ] , [ 0.0377358 , 0.0357143 ] ] 509 [ [ 0 , 0.0126582 ] , [ 0.0338983 , 0.0243902 ] +i [ 0.0212766 , 0 ] , [ 0.0869565 , 0.0107527 ] ] 510 [ [ 0.0125 , 0.0212766 ] , [ 0.0338983 , 0.0606061 ] +i [ 0.015625 , 0 ] , [ 0.03125 , 0.047619 ] ] 511 [ [ 0.0107527 , 0.0714286 ] , [ 25 , 0.0425532 ] +i [ 25 , 0.025641 ] , [ 0.0243902 , 0.020202 ] ] 512 [ [ -0.0123457 , 0.0588235 ] , [ 0.0210526 , 0.025641 ] +i [ 0.0224719 , 0.0131579 ] , [ 0.0138889 , 0.0909091 ] ] 513 [ [ 0 , 0.0208333 ] , [ 0.0235294 , 0.0344828 ] +i [ 0.0105263 , -0.030303 ] , [ 0.0298507 , 0.0169492 ] ] 514 [ [ 0 , 0.0163934 ] , [ 0.0119048 , 0.0135135 ] +i [ 0.0298507 , -0.142857 ] , [ 0.0425532 , 0.0133333 ] ] 515 [ [ -0.010989 , 0.0117647 ] , [ 0.0333333 , 0.0294118 ] +i [ 0.0126582 , 0.0322581 ] , [ 0.0454545 , 0.0217391 ] ] 516 [ [ 0.0178571 , 0.0196078 ] , [ 0.0769231 , 0.031746 ] +i [ 0.0240964 , 0 ] , [ 0.0243902 , 1 ] ] 517 [ [ -0.016129 , 0.1 ] , [ 0.0229885 , 0.285714 ] +i [ 0.0952381 , -0.0227273 ] , [ 0.285714 , 0.0465116 ] ] 518 [ [ 0.0188679 , 0.0465116 ] , [ 0.0188679 , 0.0294118 ] +i [ 0.0243902 , 0 ] , [ 0.0357143 , 0.0357143 ] ] 519 [ [ 0.0212766 , 0.0714286 ] , [ 0.0416667 , 0.0714286 ] +i [ 0.25 , 0 ] , [ 0.030303 , 0.0263158 ] ] 520 [ [ 0.111111 , 0.0294118 ] , [ 0.0689655 , 0.0235294 ] +i [ 0.25 , -0.0222222 ] , [ 0.012987 , 0.0133333 ] ] 521 [ [ 0.037037 , 0.0444444 ] , [ 0.0344828 , 0.153846 ] +i [ 0.2 , 0 ] , [ 0.0217391 , 0.142857 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 221 522 [ [ 0.0285714 , 0.020202 ] , [ 0.105263 , 0.05 ] +i [ 0.0217391 , 0.04 ] , [ 0.0147059 , 0.0392157 ] ] 523 [ [ 0.0204082 , 0.222222 ] , [ 0.0163934 , 0.0120482 ] +i [ 0.0229885 , 0.0104167 ] , [ 0.0434783 , 0.0555556 ] ] 524 [ [ 0.05 , 0.0212766 ] , [ 0.0204082 , 0.142857 ] +i [ 0.0526316 , 0 ] , [ 0.0769231 , 0.030303 ] ] 525 [ [ 0 , 0.025641 ] , [ 0.0540541 , 0.0769231 ] +i [ 0.285714 , -0.0151515 ] , [ 0.0238095 , 0.0185185 ] ] 526 [ [ 0.037037 , 0.0119048 ] , [ 0.0416667 , 0.0833333 ] +i [ 0.0121951 , 0 ] , [ 0.0222222 , 0.04 ] ] 527 [ [ 0 , 0.0769231 ] , [ 0.0327869 , 0.0285714 ] +i [ 0.0246914 , 0.0416667 ] , [ 0.0208333 , 0.666667 ] ] 528 [ [ -0.04 , 0.0833333 ] , [ 0.0222222 , 0.0222222 ] +i [ 0.0131579 , 0.0111111 ] , [ 0.166667 , 0.0175439 ] ] 529 [ [ -0.015625 , 0.0294118 ] , [ 0.0126582 , 0.027027 ] +i [ 0.0227273 , 0 ] , [ 0.0606061 , 0.025974 ] ] 530 [ [ -0.011236 , 0.0588235 ] , [ 0.0666667 , 0.0232558 ] +i [ 0.0196078 , 0.0108696 ] , [ 0.0106383 , 0.0224719 ] ] 531 [ [ 0 , 0.0307692 ] , [ 0.0298507 , 0.0133333 ] +i [ 0.0215054 , 0.0204082 ] , [ 0.0769231 , 0.0107527 ] ] 532 [ [ 0.25 , 0.0392157 ] , [ 0.0206186 , 0.0206186 ] +i [ 0.0126582 , -0.111111 ] , [ 0.0114943 , 0.0526316 ] ] 533 [ [ 0.0227273 , 0.0363636 ] , [ 0.0105263 , 0.4 ] +i [ 0.0232558 , -0.04 ] , [ 0.0142857 , 0.0243902 ] ] 534 [ [ 0 , 0.166667 ] , [ 1 , 0.030303 ] +i [ 0.0175439 , -0.027027 ] , [ 0.181818 , 0.111111 ] ] 535 [ [ 0.0135135 , 0.0217391 ] , [ 0.05 , 0.0277778 ] +i [ 0.285714 , 0 ] , [ 0.0135135 , 0.0285714 ] ] 536 [ [ 0 , 0.0869565 ] , [ 0.0153846 , 0.0204082 ] +i [ 0.111111 , -0.0136986 ] , [ 0.111111 , 0.010989 ] ] 537 [ [ 0 , 0.0147059 ] , [ 0.333333 , 0.0833333 ] +i [ 0.0119048 , 0.0185185 ] , [ 0.05 , 0.0740741 ] ] 538 [ [ -0.030303 , 0.0140845 ] , [ 0.181818 , 0.333333 ] +i [ 0.1 , 0 ] , [ 0.0277778 , 0.0232558 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 222 539 [ [ 0.011236 , 0.0172414 ] , [ 0.0151515 , 0.0263158 ] +i [ 0.0645161 , 0 ] , [ 0.333333 , 0.0196078 ] ] 540 [ [ 0.0294118 , 0.0107527 ] , [ 0.0106383 , 0.02 ] +i [ 0.030303 , 0 ] , [ 0.0135135 , 0.0227273 ] ] 541 [ [ 0.0285714 , 0.0434783 ] , [ 0.0185185 , 0.1 ] +i [ 0.0104167 , -0.0208333 ] , [ 0.111111 , 0.1 ] ] 542 [ [ 0.0714286 , 0.0204082 ] , [ 0.0151515 , 0.031746 ] +i [ 0.0144928 , -0.05 ] , [ 0.0142857 , 0.0240964 ] ] 543 [ [ 0 , 0.0208333 ] , [ 0.285714 , 0.03125 ] +i [ 0.04 , 0.047619 ] , [ 0.0175439 , 0.0588235 ] ] 544 [ [ -0.01 , 0.025641 ] , [ 0.0253165 , 0.0102041 ] +i [ 0.0285714 , 0 ] , [ 0.02 , 0.0140845 ] ] 545 [ [ -0.0555556 , 0.0204082 ] , [ 0.0106383 , 0.0169492 ] +i [ 0.0172414 , 0.0138889 ] , [ 0.0338983 , 0.0120482 ] ] 546 [ [ 0 , 0.0227273 ] , [ 0.117647 , 0.0126582 ] +i [ 0.142857 , -0.04 ] , [ 125 , 0.0135135 ] ] 547 [ [ 0 , 0.0416667 ] , [ 0.0769231 , 0.0229885 ] +i [ 0.028169 , -0.0149254 ] , [ 0.0232558 , 0.0289855 ] ] 548 [ [ 0 , 0.0434783 ] , [ 0.0104167 , 0.0833333 ] +i [ 0.0625 , 0 ] , [ 0.0909091 , 0.0263158 ] ] 549 [ [ 0 , 0.0235294 ] , [ 0.030303 , 0.285714 ] +i [ 0.030303 , -1 ] , [ 0.0235294 , 0.0222222 ] ] 550 [ [ 0.0212766 , 0.0769231 ] , [ 0.0625 , 0.0128205 ] +i [ 0.02 , -0.142857 ] , [ 1 , 0.0555556 ] ] 551 [ [ -0.0144928 , 0.25 ] , [ 0.0238095 , 0.0625 ] +i [ 0.025641 , -0.0105263 ] , [ 0.0123457 , 0.0357143 ] ] 552 [ [ 0 , 0.0327869 ] , [ 0.027027 , 0.0416667 ] +i [ 0.0222222 , 0 ] , [ 0.0833333 , 0.0227273 ] ] 553 [ [ 0.0555556 , 0.0714286 ] , [ 0.0322581 , 0.0666667 ] +i [ 0.01 , -0.010101 ] , [ 0.25 , 0.010101 ] ] 554 [ [ 0.0322581 , 0.0740741 ] , [ 0.0147059 , 0.0555556 ] +i [ 125 , 0 ] , [ 0.0138889 , 0.333333 ] ] 555 [ [ -0.0555556 , 0.0298507 ] , [ 0.0588235 , 0.166667 ] +i [ 0.0126582 , 0.010989 ] , [ 0.166667 , 0.0487805 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 223 556 [ [ 0 , 0.0212766 ] , [ 0.010989 , 0.0144928 ] +i [ 0.0740741 , 0.0114943 ] , [ 0.181818 , 0.02 ] ] 557 [ [ -0.0131579 , 0.012987 ] , [ 0.010989 , 0.0333333 ] +i [ 0.0357143 , 0 ] , [ 0.025641 , 0.0235294 ] ] 558 [ [ 0 , 0.0526316 ] , [ 0.0833333 , 0.0434783 ] +i [ 0.5 , 0 ] , [ 0.0114943 , 0.0571429 ] ] 559 [ [ 125 , 0.0588235 ] , [ 0.0327869 , 0.0769231 ] +i [ 0.037037 , 0.0384615 ] , [ 0.021978 , 0.0111111 ] ] 560 [ [ 0 , 0.037037 ] , [ 0.0243902 , 0.0714286 ] +i [ 0.2 , 0 ] , [ 0.030303 , 0.030303 ]] 561 [ [ 0.333333 , 1 ] , [ 0.0277778 , 0.0833333 ] +i [ 0.0126582 , 0 ] , [ 0.0224719 , 0.0289855 ] ] 562 [ [ -0.2 , 0.0232558 ] , [ 0.1 , 0.0212766 ] +i [ 0.142857 , 0.0103093 ] , [ 0.0111111 , 0.0210526 ] ] 563 [ [ 0.0107527 , 0.021978 ] , [ 0.0416667 , 0.030303 ] +i [ 0.04 , 0 ] , [ 0.0384615 , 0.0185185 ] ] 564 [ [ 0.027027 , 0.03125 ] , [ 0.0285714 , 0.5 ] +i [ 0.0138889 , 0.025641 ] , [ 0.0350877 , 0.0151515 ] ] 565 [ [ 0 , 0.0384615 ] , [ 0.0246914 , 0.111111 ] +i [ 0.01 , 0 ] , [ 0.0147059 , 0.0689655 ] ] 566 [ [ -0.0108696 , 0.0166667 ] , [ 0.0166667 , 0.0322581 ] +i [ 0.0322581 , 0 ] , [ 0.0487805 , 0.0512821 ] ] 567 [ [ 0 , 0.05 ] , [ 0.0714286 , 0.0344828 ] +i [ 0.0103093 , 0.2 ] , [ 0.0289855 , 0.0206186 ] ] 568 [ [ 0.0188679 , 0.027027 ] , [ 0.5 , 0.25 ] +i [ 0.0104167 , 0 ] , [ 0.0555556 , 0.0327869 ] ] 569 [ [ 0 , 0.153846 ] , [ 0.0133333 , 0.04 ] +i [ 0.0322581 , 0 ] , [ 0.0104167 , 0.0238095 ] ] 570 [ [ 25 , 0.0212766 ] , [ 0.0103093 , 0.0135135 ] +i [ 0.0322581 , 0 ] , [ 0.117647 ,1]] 571 [ [ -0.0128205 , 0.01 ] , [ 0.0126582 , 0.0149254 ] +i [ 0.0909091 , -0.0232558 ] , [ 0.0208333 , 0.0147059 ] ] 572 [ [ 0.0526316 , 0.0408163 ] , [ 0.0119048 , 0.0222222 ] +i [ 0.0243902 , 0.0131579 ] , [ 0.028169 , 0.0416667 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 224 573 [ [ -0.0131579 , 0.0144928 ] , [ 0.0327869 , 0.0769231 ] +i [ 1 , 0.0769231 ] , [ 0.0285714 , 0.025641 ] ] 574 [ [ 0 , 0.133333 ] , [ 0.0153846 , 2 ] +i [ 0.020202 , 0.0120482 ] , [ 0.0131579 , 0.028169 ] ] 575 [ [ -1 , 0.0294118 ] , [ 0.028169 , 0.05 ] +i [ 0.0178571 , 0 ] , [ 0.0357143 , 0.0151515 ] ] 576 [ [ 0 , 0.333333 ] , [ 0.0909091 , 0.0689655 ] +i [ 0.0714286 , -0.047619 ] , [ 0.0120482 , 0.0606061 ] ] 577 [ [ -0.0144928 , 0.037037 ] , [ 0.0210526 , 0.0714286 ] +i [ 0.011236 , 0.0181818 ] , [ 0.333333 , 0.0298507 ] ] 578 [ [ 0 , 0.0357143 ] , [ 0.0116279 , 0.0229885 ] +i [ 0.0555556 , 0.0238095 ] , [ 0.03125 , 0.0204082 ] ] 579 [ [ 0 , 0.0333333 ] , [ 0.0120482 , 0.111111 ] +i [ 0.333333 , -0.0105263 ] , [ 0.0277778 , 0.142857 ] ] 580 [ [ -0.0769231 , 0.5 ] , [ 0.0384615 , 0.0689655 ] +i [ 0.0166667 , 0 ] , [ 0.0140845 , 0.04 ] ] 581 [ [ 0 , 0.0131579 ] , [ 0.0117647 , 0.142857 ] +i [ 0.0338983 , -0.0102041 ] , [ 0.0105263 , 0.0166667 ] ] 582 [ [ -25 , 0.166667 ] , [ 0.0104167 , 0.0113636 ] +i [ 0.0227273 , -0.0238095 ] , [ 0.05 , 0.0224719 ] ] 583 [ [ -0.0232558 , 0.0235294 ] , [ 0.0416667 , 0.0144928 ] +i [ 25 , -0.01 ] , [ 0.0625 , 0.0869565 ] ] 584 [ [ 0 , 0.0338983 ] , [ 0.0384615 , 0.0714286 ] +i [ 0.0289855 , -0.0153846 ] , [ 0.0178571 , 0.166667 ] ] 585 [ [ 0 , 0.0740741 ] , [ 0.0229885 , 0.0833333 ] +i [ 0.0434783 , 0.0142857 ] , [ 0.0169492 , 0.166667 ] ] 586 [ [ 0 , 0.0263158 ] , [ 0.0769231 , 0.0416667 ] +i [ 0.05 , 0.0108696 ] , [ 0.0204082 , 0.0327869 ] ] 587 [ [ -0.0555556 , 0.0235294 ] , [ 0.0416667 , 0.0357143 ] +i [ 0.0277778 , 0.333333 ] , [ 2 , 0.016129 ] ] 588 [ [ 0 , 0.03125 ] , [ 0.0232558 , 0.0222222 ] +i [ 0.25 , -0.0222222 ] , [ 0.0277778 , 0.0307692 ] ] 589 [ [ 0 , 125 ] , [ 0.047619 , 0.0350877 ] +i [ 0.2 , 0.05 ] , [ 0.0357143 , 0.031746 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 225 590 [ [ -0.0142857 , 0.0512821 ] , [ 0.142857 , 0.0217391 ] +i [ 1 , 0.0714286 ] , [ 0.0121951 , 0.0384615 ] ] 591 [ [ -0.0106383 , 0.0322581 ] , [ 0.0246914 , 0.0133333 ] +i [ 0.0235294 , 0.025641 ] , [ 0.142857 , 0.0175439 ] ] 592 [ [ -0.0121951 , 0.0540541 ] , [ 2 , 0.0149254 ] +i [ 0.0107527 , 0 ] , [ 0.0153846 , 0.25 ] ] 593 [ [ -0.037037 , 0.0285714 ] , [ 0.0243902 , 0.027027 ] +i [ 0.0151515 , -0.166667 ] , [ 0.0769231 , 0.0136986 ] ] 594 [ [ -0.0175439 , 0.0714286 ] , [ 0.0103093 , 0.037037 ] +i [ 0.030303 , 0.0116279 ] , [ 0.0121951 , 0.0666667 ] ] 595 [ [ 0.04 , 0.0289855 ] , [ 0.0666667 , 0.0454545 ] +i [ 0.117647 , -0.0344828 ] , [ 0.0322581 , 0.021978 ] ] 596 [ [ -0.0217391 , 0.25 ] , [ 0.02 , 0.010989 ] +i [ 0.0217391 , 0 ] , [ 0.0217391 , 0.111111 ] ] 597 [ [ 0 , 0.0689655 ] , [ 0.0178571 , 0.0103093 ] +i [ 0.047619 , -0.0238095 ] , [ 0.142857 , 0.0212766 ] ] 598 [ [ 0.0136986 , 0.117647 ] , [ 0.105263 , 0.0222222 ] +i [ 0.4 , 0 ] , [ 25 , 125 ] ] 599 [ [ 0 , 0.0540541 ] , [ 0.0338983 , 1 ] +i [ 0.0869565 , -0.0133333 ] , [ 0.0555556 , 0.0344828 ] ] 600 [ [ 0.333333 , 0.0227273 ] , [ 0.0212766 , 0.0425532 ] +i [ 0.0909091 , 0.0344828 ] , [ 0.0105263 , 0.0526316 ] ] 601 [ [ 1 , 0.0116279 ] , [ 0.166667 , 0.0149254 ] +i [ 0.0181818 , 0 ] , [ 0.0232558 , 0.0227273 ] ] 602 [ [ 0.0131579 , 0.0232558 ] , [ 0.0212766 , 0.0185185 ] +i [ 0.08 , 0 ] , [ 0.0408163 , 0.0833333 ] ] 603 [ [ 0 , 0.0555556 ] , [ 0.0117647 , 0.0142857 ] +i [ 0.25 , -0.0149254 ] , [ 0.4 , 0.0235294 ] ] 604 [ [ 0.0140845 , 0.0909091 ] , [ 0.0465116 , 0.030303 ] +i [ 0.04 , 0.0169492 ] , [ 0.0204082 , 0.0149254 ] ] 605 [ [ 0.0136986 , 125 ] , [ 0.0666667 , 0.08 ] +i [ 0.016129 , 0 ] , [ 2 , 0.0147059 ] ] 606 [ [ 0.0243902 , 0.0263158 ] , [ 0.08 , 0.0425532 ] +i [ 0.0227273 , 0 ] , [ 0.0120482 , 0.0277778 ] ] 607 [ [ 0 , 0.0454545 ] , [ 0.0512821 , 0.0117647 ] +i [ 0.0344828 , -25 ] , [ 0.0210526 , 0.0163934 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 226 608 [ [ 0.0714286 , 0.0235294 ] , [ 0.0108696 , 0.01 ] +i [ 0.0217391 , -0.0243902 ] , [ 0.021978 , 0.142857 ] ] 609 [ [ 0 , 0.0126582 ] , [ 0.0181818 , 0.5 ] +i [ 0.0416667 , 0.0714286 ] , [ 0.010101 , 0.0425532 ] ] 610 [ [ 0 , 0.0338983 ] , [ 0.0357143 , 0.0645161 ] +i [ 0.5 , -0.037037 ] , [ 0.0215054 , 0.0149254 ] ] 611 [ [ 0 , 0.0277778 ] , [ 0.0144928 , 0.01 ] +i [ 0.181818 , -0.0714286 ] , [ 0.222222 , 0.0277778 ] ] 612 [ [ -0.0121951 , 0.0215054 ] , [ 0.0117647 , 0.0121951 ] +i [ 0.0408163 , 0.0243902 ] , [ 0.08 , 0.5 ] ] 613 [ [ -0.04 , 0.133333 ] , [ 0.25 , 0.0135135 ] +i [ 0.02 , 0.0149254 ] , [ 0.0144928 , 0.0116279 ] ] 614 [ [ 0.0294118 , 0.0227273 ] , [ 0.0232558 , 0.0102041 ] +i [ 0.0224719 , 0.0136986 ] , [ 0.0512821 , 0.142857 ] ] 615 [ [ 0.0142857 , 0.08 ] , [ 0.285714 , 0.0909091 ] +i [ 0.0222222 , 0 ] , [ 0.0512821 , 0.1 ] ] 616 [ [ 0 , 0.0106383 ] , [ 0.02 , 0.0105263 ] +i [ 0.333333 , 0.111111 ] , [ 0.0571429 , 0.0714286 ] ] 617 [ [ 0 , 0.0119048 ] , [ 0.0357143 , 0.027027 ] +i [ 0.166667 , -0.0222222 ] , [ 0.0338983 , 0.0263158 ] ] 618 [ [ 0.016129 , 0.5 ] , [ 0.037037 , 0.0357143 ] +i [ 0.0740741 , -0.0103093 ] , [ 0.0344828 , 0.0384615 ] ] 619 [ [ 0.02 , 0.0740741 ] , [ 0.0285714 , 0.0571429 ] +i [ 0.015625 , -0.0322581 ] , [ 0.0454545 , 0.0147059 ] ] 620 [ [ 0.0263158 , 125 ] , [ 0.02 , 0.0140845 ] +i [ 0.0178571 , 0 ] , [ 0.0909091 , 0.0123457 ] ] 621 [ [ -0.0106383 , 0.0105263 ] , [ 0.08 , 0.0444444 ] +i [ 0.028169 , -0.0166667 ] , [ 0.0294118 , 0.0175439 ] ] 622 [ [ 0 , 0.0952381 ] , [ 0.0102041 , 0.0666667 ] +i [ 0.0266667 , 0 ] , [ 0.0166667 , 0.0307692 ] ] 623 [ [ -0.04 , 0.025641 ] , [ 0.0952381 , 0.0126582 ] +i [ 0.0181818 , -0.0153846 ] , [ 0.0208333 , 0.5 ] ] 624 [ [ -0.0243902 , 0.0131579 ] , [ 0.0769231 , 0.0212766 ] +i [ 0.0108696 , 0.015873 ] , [ 0.0277778 , 0.0526316 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 227 625 [ [ -0.0151515 , 0.142857 ] , [ 0.0116279 , 0.0392157 ] +i [ 0.2 , 0 ] , [ 0.0136986 , 0.0185185 ] ] 626 [ [ 0.0125 , 0.0117647 ] , [ 0.0212766 , 0.0105263 ] +i [ 0.166667 , 0.0166667 ] , [ 0.025641 , 0.0350877 ] ] 627 [ [ 0 , 0.0210526 ] , [ 0.0454545 , 0.285714 ] +i [ 0.030303 , 0.0125 ] , [ 0.021978 , 0.0555556 ] ] 628 [ [ -0.0102041 , 0.0606061 ] , [ 0.0263158 , 0.0606061 ] +i [ 0.0487805 , 0.03125 ] , [ 0.0229885 , 0.016129 ] ] 629 [ [ 0 , 0.0103093 ] , [ 0.0229885 , 0.0555556 ] +i [ 0.0135135 , 0 ] , [ 0.25 , 0.4 ] ] 630 [ [ 0 , 0.0425532 ] , [ 0.0126582 , 0.0232558 ] +i [ 0.0434783 , -0.0322581 ] , [ 0.0322581 , 0.0416667 ] ] 631 [ [ 0.011236 , 0.0444444 ] , [ 0.666667 , 0.0344828 ] +i [ 0.047619 , -0.0588235 ] , [ 0.025641 , 0.03125 ] ] 632 [ [ 0 , 0.0285714 ] , [ 0.047619 , 0.0151515 ] +i [ 0.0350877 , -0.0294118 ] , [ 0.0229885 , 0.0689655 ] ] 633 [ [ 0 , 0.105263 ] , [ 0.0588235 , 0.0103093 ] +i [ 0.0111111 , 0 ] , [ 0.105263 , 0.25 ] ] 634 [ [ 0 , 0.0434783 ] , [ 0.028169 , 0.0714286 ] +i [ 0.027027 , -0.0909091 ] , [ 0.0289855 , 0.142857 ] ] 635 [ [ 0 , 0.0227273 ] , [ 0.0666667 , 0.0625 ] +i [ 0.0113636 , 0 ] , [ 0.0102041 , 0.0285714 ] ] 636 [ [ 0 , 0.1 ] , [ 0.0289855 , 0.0645161 ] +i [ 0.025641 , -0.030303 ] , [ 1 , 0.666667 ]] 637 [ [ -0.010989 , 0.0526316 ] , [ 0.04 , 0.153846 ] +i [ 0.0212766 , 0.0526316 ] , [ 0.0512821 , 0.0111111 ] ] 638 [ [ 0.0149254 , 0.0142857 ] , [ 25 , 0.0144928 ] +i [ 0.0263158 , 0 ] , [ 0.0175439 , 0.0224719 ] ] 639 [ [ -0.0454545 , 0.0217391 ] , [ 0.0232558 , 0.0454545 ] +i [ 0.0113636 , -0.1 ] , [ 0.0222222 , 0.0238095 ] ] 640 [ [ 0 , 0.142857 ] , [ 0.05 , 0.0454545 ] +i [ 0.666667 , 0 ] , [ 0.0454545 , 0.0215054 ] ] 641 [ [ 125 , 0.0227273 ] , [ 0.0263158 , 0.0125 ] +i [ 0.0169492 , 0 ] , [ 0.0425532 , 0.0113636 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 228 642 [ [ 0 , 0.0181818 ] , [ 0.0273973 , 0.0425532 ] +i [ 0.0350877 , 0 ] , [ 2 , 0.0106383 ] ] 643 [ [ 0 , 0.0238095 ] , [ 0.333333 , 0.0106383 ] +i [ 0.0105263 , -0.0172414 ] , [ 0.0454545 , 0.0350877 ] ] 644 [ [ -0.0909091 , 0.047619 ] , [ 0.666667 , 0.666667 ] +i [ 0.0204082 , 0 ] , [ 0.0714286 , 0.0322581 ] ] 645 [ [ 0.025641 , 0.5 ] , [ 0.0142857 , 0.2 ] +i [ 0.0224719 , -0.0133333 ] , [ 0.0133333 , 0.0294118 ] ] 646 [ [ 0.0357143 , 0.0769231 ] , [ 0.333333 , 125 ] +i [ 0.105263 , 1 ] , [ 0.0689655 , 0.0253165 ] ] 647 [ [ 0 , 0.0215054 ] , [ 0.0740741 , 0.0526316 ] +i [ 0.0166667 , 25 ] , [ 0.0243902 , 0.0188679 ] ] 648 [ [ -0.0104167 , 0.015625 ] , [ 0.0714286 , 0.0769231 ] +i [ 0.016129 , 0.0102041 ] , [ 0.016129 , 0.0116279 ] ] 649 [ [ 0.0208333 , 0.0232558 ] , [ 0.0952381 , 0.03125 ] +i [ 0.0588235 , 0 ] , [ 0.0571429 , 0.0108696 ] ] 650 [ [ 0 , 0.0408163 ] , [ 0.0416667 , 0.0217391 ] +i [ 0.0298507 , 0.016129 ] , [ 0.0121951 , 0.047619 ] ] 651 [ [ 0.0714286 , 0.0689655 ] , [ 0.0625 , 0.0238095 ] +i [ 0.0833333 , -0.0232558 ] , [ 0.0909091 , 0.0224719 ] ] 652 [ [ 0 , 2 ] , [ 0.0204082 , 0.166667 ] +i [ 0.111111 , -0.0555556 ] , [ 0.333333 , 0.0689655 ] ] 653 [ [ -0.0232558 , 0.142857 ] , [ 0.25 , 0.0108696 ] +i [ 0.5 , -0.0153846 ] , [ 0.0208333 , 0.010101 ] ] 654 [ [ -0.0714286 , 0.02 ] , [ 0.0204082 , 0.0108696 ] +i [ 0.04 , -0.0188679 ] , [ 0.0454545 , 0.0487805 ] ] 655 [ [ 0.0149254 , 0.0243902 ] , [ 0.0123457 , 125 ] +i [ 0.0540541 , 0 ] , [ 0.015873 , 0.03125 ] ] 656 [ [ 0 , 0.0238095 ] , [ 0.02 , 0.0444444 ] +i [ 0.0526316 , 0 ] , [ 0.05 , 0.0147059 ]] 657 [ [ -0.0175439 , 0.0416667 ] , [ 0.285714 , 0.0188679 ] +i [ 0.0103093 , 0.0138889 ] , [ 2 , 0.025641 ] ] 658 [ [ 0 , 0.0606061 ] , [ 25 , 0.0120482 ] +i [ 1 , 0 ] , [ 0.0169492 , 0.0454545 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 229 659 [ [ -0.0106383 , 0.0273973 ] , [ 0.0344828 , 0.0172414 ] +i [ 0.0243902 , 0 ] , [ 0.0833333 , 0.0172414 ] ] 660 [ [ 0 , 0.0377358 ] , [ 0.025641 , 0.0172414 ] +i [ 0.0116279 , 0.0106383 ] , [ 0.0588235 , 0.0689655 ] ] 661 [ [ 0.030303 , 0.0357143 ] , [ 0.166667 , 0.0217391 ] +i [ 0.0108696 , -0.0119048 ] , [ 0.0121951 , 0.028169 ] ] 662 [ [ 0.0117647 , 0.0625 ] , [ 0.0263158 , 0.011236 ] +i [ 0.0178571 , 0 ] , [ 0.0384615 , 0.0289855 ] ] 663 [ [ -0.010101 , 0.0606061 ] , [ 0.0338983 , 0.0210526 ] +i [ 0.0363636 , 0 ] , [ 0.142857 , 0.0512821 ] ] 664 [ [ 0 , 0.0434783 ] , [ 0.0212766 , 2 ] +i [ 0.010101 , -0.0102041 ] , [ 0.0238095 , 0.0384615 ] ] 665 [ [ 0 , 0.0125 ] , [ 0.0224719 , 0.027027 ] +i [ 1 , -0.0153846 ] , [ 0.0363636 , 0.0294118 ] ] 666 [ [ 0 , 0.0243902 ] , [ 0.0166667 , 0.0526316 ] +i [ 0.0344828 , 0 ] , [ 0.0434783 , 0.0185185 ] ] 667 [ [ -0.5 , 0.0128205 ] , [ 1 , 0.0266667 ] +i [ 0.0238095 , -0.0121951 ] , [ 0.142857 , 0.0113636 ] ] 668 [ [ 0.0204082 , 0.0666667 ] , [ 0.010101 , 25 ] +i [ 0.0212766 , 0.015873 ] , [ 0.0147059 , 0.0181818 ] ] 669 [ [ 0 , 0.0434783 ] , [ 0.0153846 , 0.0227273 ] +i [ 0.05 , 0.037037 ] , [ 0.0204082 , 0.0444444 ] ] 670 [ [ -1 , 0.0169492 ] , [ 0.0666667 , 0.0322581 ] +i [ 0.0125 , 0.25 ] , [ 0.01 , 0.0232558 ] ] 671 [ [ -25 , 0.0454545 ] , [ 0.0120482 , 0.030303 ] +i [ 0.0121951 , 0 ] , [ 0.0123457 , 0.028169 ] ] 672 [ [ 0 , 0.1 ] , [ 0.0208333 , 0.037037 ] +i [ 0.0217391 , -0.2 ] , [ 0.025641 , 0.0111111 ] ] 673 [ [ 0.0105263 , 0.0588235 ] , [ 0.0175439 , 0.0689655 ] +i [ 0.0333333 , 0.0322581 ] , [ 0.0425532 , 0.0113636 ] ] 674 [ [ 0 , 0.0126582 ] , [ 0.0111111 , 0.020202 ] +i [ 0.117647 , -1 ] , [ 0.0344828 , 0.030303 ] ] 675 [ [ -0.01 , 0.0625 ] , [ 0.0188679 , 0.08 ] +i [ 0.105263 , -0.0106383 ] , [ 0.0133333 , 0.0285714 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 230 676 [ [ 0 , 0.0344828 ] , [ 0.0246914 , 0.0108696 ] +i [ 0.016129 , 0.011236 ] , [ 0.05 , 0.0163934 ] ] 677 [ [ -0.01 , 0.0540541 ] , [ 0.0540541 , 0.0217391 ] +i [ 0.0769231 , 0 ] , [ 0.025974 , 0.0465116 ] ] 678 [ [ 0.0185185 , 0.0196078 ] , [ 0.0377358 , 0.02 ] +i [ 1 , -0.0108696 ] , [ 0.166667 , 0.133333 ] ] 679 [ [ 0.02 , 0.08 ] , [ 0.0465116 , 0.0363636 ] +i [ 0.111111 , -0.0243902 ] , [ 0.0769231 , 0.0235294 ] ] 680 [ [ 0.0111111 , 0.0512821 ] , [ 0.105263 , 0.047619 ] +i [ 0.153846 , 0.0102041 ] , [ 0.333333 , 0.0425532 ] ] 681 [ [ 0.0133333 , 0.0645161 ] , [ 0.030303 , 0.0188679 ] +i [ 0.05 , -0.0102041 ] , [ 0.0181818 , 0.0344828 ] ] 682 [ [ 0.0243902 , 0.0408163 ] , [ 0.0175439 , 0.08 ] +i [ 1 , -0.0526316 ] , [ 0.166667 , 0.0289855 ] ] 683 [ [ -0.0909091 , 0.0363636 ] , [ 1 , 0.0131579 ] +i [ 0.0625 , -0.0263158 ] , [ 0.0625 , 0.0322581 ] ] 684 [ [ 0.0133333 , 0.0588235 ] , [ 0.0625 , 0.0769231 ] +i [ 0.0204082 , -0.03125 ] , [ 0.0454545 , 0.222222 ] ] 685 [ [ 0 , 0.0136986 ] , [ 0.0434783 , 0.015625 ] +i [ 0.025974 , -0.5 ] , [ 0.142857 , 0.0222222 ] ] 686 [ [ -0.0138889 , 0.0166667 ] , [ 0.0136986 , 0.0217391 ] +i [ 0.02 , -0.0138889 ] , [ 0.0144928 , 0.0243902 ] ] 687 [ [ 0 , 0.027027 ] , [ 0.0166667 , 0.0215054 ] +i [ 0.010101 , 0.0113636 ] , [ 0.0909091 , 0.333333 ] ] 688 [ [ 0.0555556 , 0.4 ] , [ 0.0142857 , 0.0119048 ] +i [ 0.0289855 , -0.025641 ] , [ 0.0266667 , 0.0175439 ] ] 689 [ [ -0.03125 , 0.0175439 ] , [ 0.0140845 , 0.0238095 ] +i [ 25 , -0.0106383 ] , [ 0.0206186 , 0.142857 ] ] 690 [ [ 0 , 0.0357143 ] , [ 0.0117647 , 0.0169492 ] +i [ 0.0235294 , -0.0384615 ] , [ 0.0131579 , 0.0222222 ] ] 691 [ [ 0 , 0.0298507 ] , [ 0.0555556 , 0.0166667 ] +i [ 0.0487805 , -0.0227273 ] , [ 0.0175439 , 0.0181818 ] ] 692 [ [ 0.0147059 , 0.0102041 ] , [ 0.0217391 , 0.666667 ] +i [ 0.0111111 , 0 ] , [ 0.0204082 , 0.047619 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 231 693 [ [ 0 , 0.0338983 ] , [ 0.0769231 , 0.010101 ] +i [ 0.0136986 , 0 ] , [ 0.0138889 , 0.1 ] ] 694 [ [ 0 , 0.0172414 ] , [ 0.0206186 , 0.0526316 ] +i [ 0.0153846 , -0.2 ] , [ 0.105263 , 0.0434783 ] ] 695 [ [ 0 , 0.0606061 ] , [ 0.0338983 , 0.0425532 ] +i [ 0.0163934 , -0.0227273 ] , [ 0.0833333 , 0.111111 ] ] 696 [ [ 0 , 0.0263158 ] , [ 0.0133333 , 0.0588235 ] +i [ 0.0121951 , -0.0172414 ] , [ 0.030303 , 0.0454545 ] ] 697 [ [ 0.037037 , 2 ] , [ 0.016129 , 0.015625 ] +i [ 0.0178571 , 0.0666667 ] , [ 0.0196078 , 0.0144928 ] ] 698 [ [ 0 , 0.027027 ] , [ 0.016129 , 0.333333 ] +i [ 0.02 , 0.0555556 ] , [ 0.2 , 0.0188679 ] ] 699 [ [ 0 , 0.0113636 ] , [ 0.0128205 , 0.2 ] +i [ 0.015625 , -0.0135135 ] , [ 0.0625 , 0.0136986 ] ] 700 [ [ -0.0135135 , 0.0555556 ] , [ 0.0102041 , 0.0769231 ] +i [ 0.25 , -0.0117647 ] , [ 0.0444444 , 0.0869565 ] ] 701 [ [ -0.0107527 , 0.0344828 ] , [ 0.0333333 , 125 ] +i [ 0.0588235 , 0 ] , [ 0.0149254 , 0.031746 ] ] 702 [ [ -0.0238095 , 0.0246914 ] , [ 0.0243902 , 1 ] +i [ 0.0246914 , 0.0113636 ] , [ 0.0238095 , 0.0322581 ] ] 703 [ [ -0.0116279 , 0.0294118 ] , [ 0.0384615 , 0.0392157 ] +i [ 0.4 , 0.027027 ] , [ 0.0147059 , 0.0181818 ] ] 704 [ [ 0.0238095 , 0.0357143 ] , [ 0.1 , 0.0243902 ] +i [ 0.05 , 0 ] , [ 0.0175439 , 0.0625 ] ] 705 [ [ 0 , 0.030303 ] , [ 0.0666667 , 0.0196078 ] +i [ 0.027027 , -0.0111111 ] , [ 0.010101 , 0.0238095 ] ] 706 [ [ -0.0108696 , 0.0212766 ] , [ 0.0232558 , 0.0869565 ] +i [ 0.0588235 , 0.0434783 ] , [ 0.0769231 , 0.0125 ] ] 707 [ [ -0.0147059 , 0.0111111 ] , [ 0.0555556 , 0.0217391 ] +i [ 0.0526316 , 0.047619 ] , [ 0.5 , 0.0263158 ] ] 708 [ [ 0 , 1 ] , [ 0.0227273 , 0.0588235 ] +i [ 0.105263 , 0 ] , [ 0.0144928 , 0.0540541 ]] 709 [ [ -0.0243902 , 0.05 ] , [ 0.0227273 , 0.0204082 ] +i [ 0.181818 , 0 ] , [ 0.181818 , 0.2 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 232 710 [ [ 0 , 0.030303 ] , [ 0.0588235 , 0.0108696 ] +i [ 0.0102041 , 0 ] , [ 0.037037 , 0.0833333 ] ] 711 [ [ -0.0147059 , 0.0235294 ] , [ 0.0229885 , 0.0277778 ] +i [ 0.0103093 , 0 ] , [ 0.015625 , 0.0555556 ] ] 712 [ [ 0 , 0.0588235 ] , [ 0.0210526 , 0.0208333 ] +i [ 0.0526316 , 0 ] , [ 0.0153846 , 0.0769231 ] ] 713 [ [ -0.016129 , 0.05 ] , [ 0.037037 , 0.028169 ] +i [ 0.0392157 , 0 ] , [ 0.0526316 , 0.117647 ] ] 714 [ [ -0.0153846 , 0.030303 ] , [ 0.0232558 , 0.0235294 ] +i [ 0.5 , -0.0277778 ] , [ 0.333333 , 0.03125 ] ] 715 [ [ -0.142857 , 0.0487805 ] , [ 0.181818 , 0.025641 ] +i [ 0.25 , 0.02 ] , [ 0.0384615 , 0.0196078 ] ] 716 [ [ 0.0113636 , 0.0151515 ] , [ 0.0114943 , 0.027027 ] +i [ 0.0222222 , 0.0116279 ] , [ 0.0121951 , 0.0178571 ] ] 717 [ [ 0 , 0.0277778 ] , [ 0.0188679 , 0.0208333 ] +i [ 0.0909091 , 0 ] , [ 0.0113636 , 0.0714286 ] ] 718 [ [ 0.011236 , 0.111111 ] , [ 0.0178571 , 0.0416667 ] +i [ 0.0384615 , -0.0126582 ] , [ 0.010101 , 0.0229885 ] ] 719 [ [ 0 , 0.037037 ] , [ 0.0166667 , 0.0289855 ] +i [ 0.047619 , 0.0555556 ] , [ 0.0327869 , 0.0185185 ] ] 720 [ [ 0.0144928 , 0.0208333 ] , [ 0.0434783 , 0.0425532 ] +i [ 0.0212766 , 0 ] , [ 0.0140845 , 0.181818 ] ] 721 [ [ 0.0108696 , 1 ] , [ 0.0454545 , 0.1 ] +i [ 0.0285714 , -0.0222222 ] , [ 0.0344828 , 0.0106383 ] ] 722 [ [ 125 , 0.0178571 ] , [ 0.0217391 , 0.0181818 ] +i [ 0.0833333 , 0.0526316 ] , [ 0.0113636 , 0.0206186 ] ] 723 [ [ 0 , 0.0444444 ] , [ 0.153846 , 0.0666667 ] +i [ 0.0153846 , -0.0181818 ] , [ 0.0212766 , 0.0333333 ] ] 724 [ [ -0.0117647 , 0.0149254 ] , [ 0.0120482 , 0.03125 ] +i [ 0.021978 , 0.0714286 ] , [ 0.03125 , 0.4 ] ] 725 [ [ 0 , 0.0185185 ] , [ 0.0266667 , 0.0869565 ] +i [ 0.0116279 , -0.0117647 ] , [ 0.047619 , 0.0178571 ] ] 726 [ [ -0.0357143 , 0.0140845 ] , [ 0.0357143 , 0.0153846 ] +i [ 0.0909091 , 0.0123457 ] , [ 0.0327869 , 0.0253165 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 233 727 [ [ 0 , 0.153846 ] , [ 0.028169 , 0.0625 ] +i [ 0.0277778 , -0.0333333 ] , [ 0.142857 , 0.5 ] ] 728 [ [ 0 , 0.037037 ] , [ 0.0169492 , 0.166667 ] +i [ 0.4 , 0.0217391 ] , [ 0.0188679 , 0.0121951 ] ] 729 [ [ 0 , 0.02 ] , [ 0.028169 , 0.0294118 ] +i [ 0.0363636 , -0.02 ] , [ 0.142857 , 0.2 ]] 730 [ [ 0.0232558 , 0.02 ] , [ 0.0465116 , 0.010101 ] +i [ 0.0384615 , -0.0285714 ] , [ 0.031746 , 0.0285714 ] ] 731 [ [ 0 , 0.0135135 ] , [ 0.0125 , 0.0357143 ] +i [ 0.0714286 , 0.0102041 ] , [ 0.0487805 , 0.0769231 ] ] 732 [ [ -0.0151515 , 0.0138889 ] , [ 0.015625 , 0.0181818 ] +i [ 0.011236 , 0.0322581 ] , [ 0.0149254 , 0.166667 ] ] 733 [ [ 0.0238095 , 0.0294118 ] , [ 0.333333 , 0.0625 ] +i [ 0.0140845 , 0 ] , [ 0.0224719 , 0.0769231 ] ] 734 [ [ -0.0108696 , 0.0204082 ] , [ 0.0135135 , 0.0126582 ] +i [ 0.0266667 , 0 ] , [ 0.05 , 0.0229885 ] ] 735 [ [ 0.0163934 , 0.0208333 ] , [ 0.0135135 , 0.0263158 ] +i [ 0.0434783 , 0 ] , [ 0.0240964 , 0.0294118 ] ] 736 [ [ 0 , 0.0240964 ] , [ 0.0215054 , 0.111111 ] +i [ 0.0210526 , 0.0121951 ] , [ 0.0333333 , 0.0185185 ] ] 737 [ [ 0.2 , 0.010101 ] , [ 0.0105263 , 0.0222222 ] +i [ 0.0833333 , 0 ] , [ 0.0285714 , 0.05 ] ] 738 [ [ 0 , 0.0285714 ] , [ 0.0289855 , 0.0240964 ] +i [ 0.05 , -0.0125 ] , [ 0.027027 , 0.0142857 ] ] 739 [ [ 0 , 0.0104167 ] , [ 0.01 , 0.0212766 ] +i [ 0.0714286 , 0 ] , [ 0.0487805 , 0.0136986 ] ] 740 [ [ -0.04 , 0.0114943 ] , [ 0.0185185 , 0.0465116 ] +i [ 0.0229885 , 0 ] , [ 0.0588235 , 0.0188679 ] ] 741 [ [ -0.016129 , 0.105263 ] , [ 0.0363636 , 0.0377358 ] +i [ 0.0454545 , 0 ] , [ 0.012987 , 0.010989 ] ] 742 [ [ 0 , 1 ] , [ 0.03125 , 0.0571429 ] +i [ 0.0416667 , 0.0151515 ] , [ 0.0224719 , 0.4 ] ] 743 [ [ -0.142857 , 0.222222 ] , [ 0.0338983 , 0.0625 ] +i [ 0.031746 , 0 ] , [ 0.666667 , 0.0133333 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 234 744 [ [ -0.01 , 0.03125 ] , [ 0.0909091 , 0.028169 ] +i [ 0.02 , -0.0151515 ] , [ 0.0273973 , 0.133333 ] ] 745 [ [ -0.0243902 , 0.0952381 ] , [ 0.0512821 , 0.0119048 ] +i [ 0.181818 , 0.0357143 ] , [ 0.0740741 , 0.08 ] ] 746 [ [ -0.0144928 , 0.0147059 ] , [ 0.166667 , 0.0487805 ] +i [ 0.0102041 , 0.0217391 ] , [ 0.0140845 , 0.0740741 ] ] 747 [ [ 0 , 0.0392157 ] , [ 0.0689655 , 0.0327869 ] +i [ 0.0147059 , -0.0217391 ] , [ 0.0243902 , 0.04 ] ] 748 [ [ 0 , 0.142857 ] , [ 0.111111 , 0.0210526 ] +i [ 0.0526316 , 0.0208333 ] , [ 0.0425532 , 0.0555556 ] ] 749 [ [ -0.0434783 , 0.0833333 ] , [ 0.0357143 , 0.0526316 ] +i [ 0.285714 , 0.0285714 ] , [ 0.0555556 , 0.0121951 ] ] 750 [ [ 0.015873 , 0.0229885 ] , [ 0.133333 , 0.0105263 ] +i [ 0.0666667 , -0.0238095 ] , [ 0.0121951 , 0.0833333 ] ] 751 [ [ 0.0106383 , 0.0909091 ] , [ 0.0125 , 1 ] +i [ 0.0357143 , 0 ] , [ 0.0833333 , 0.0188679 ] ] 752 [ [ 0.0192308 , 0.0714286 ] , [ 0.285714 , 0.010101 ] +i [ 0.0135135 , 0.0357143 ] , [ 0.333333 , 0.04 ] ] 753 [ [ 0.0285714 , 0.0119048 ] , [ 0.0163934 , 0.0188679 ] +i [ 0.0121951 , 0.0178571 ] , [ 0.0103093 , 0.0196078 ] ] 754 [ [ 0 , 0.010101 ] , [ 0.0740741 , 0.0140845 ] +i [ 0.0384615 , 0.015625 ] , [ 0.0153846 , 0.0208333 ] ] 755 [ [ -0.0232558 , 0.285714 ] , [ 0.021978 , 0.0344828 ] +i [ 0.04 , 0.0133333 ] , [ 0.0363636 , 0.047619 ] ] 756 [ [ 0.0222222 , 0.0338983 ] , [ 0.0588235 , 0.153846 ] +i [ 0.0384615 , 0 ] , [ 0.0377358 , 0.0222222 ] ] 757 [ [ 0.047619 , 0.0246914 ] , [ 0.0106383 , 0.020202 ] +i [ 0.0322581 , 0 ] , [ 0.0333333 , 0.027027 ] ] 758 [ [ 0.0172414 , 0.0350877 ] , [ 0.0119048 , 0.0714286 ] +i [ 0.0350877 , 0.0147059 ] , [ 25 , 0.020202 ] ] 759 [ [ -0.0121951 , 0.4 ] , [ 0.0212766 , 0.030303 ] +i [ 0.0116279 , 0.0113636 ] , [ 0.0106383 , 0.011236 ] ] 760 [ [ 0.0153846 , 0.0103093 ] , [ 0.020202 , 0.0434783 ] +i [ 0.0571429 , 0 ] , [ 0.0277778 , 0.25 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 235 761 [ [ -0.012987 , 0.0338983 ] , [ 0.0125 , 0.0240964 ] +i [ 0.0666667 , 0.2 ] , [ 0.021978 , 0.222222 ] ] 762 [ [ 0.0434783 , 0.0625 ] , [ 0.25 , 0.142857 ] +i [ 0.0196078 , 0.0104167 ] , [ 0.028169 , 0.0142857 ] ] 763 [ [ -0.010101 , 0.0147059 ] , [ 0.166667 , 0.0666667 ] +i [ 25 , 0 ] , [ 0.0151515 , 0.0253165 ] ] 764 [ [ -0.0105263 , 0.04 ] , [ 0.0588235 , 0.0333333 ] +i [ 0.0175439 , 0 ] , [ 0.02 , 0.333333 ] ] 765 [ [ -0.0208333 , 0.0322581 ] , [ 0.04 , 0.0181818 ] +i [ 0.0125 , 0 ] , [ 0.105263 , 0.0105263 ] ] 766 [ [ 0 , 0.0125 ] , [ 0.04 , 0.0151515 ] +i [ 0.0357143 , -0.0263158 ] , [ 0.0322581 , 0.0217391 ] ] 767 [ [ 0 , 0.0714286 ] , [ 0.0172414 , 125 ] +i [ 0.0540541 , -0.0204082 ] , [ 0.0322581 , 0.222222 ] ] 768 [ [ -0.010101 , 0.0188679 ] , [ 0.0769231 , 0.0131579 ] +i [ 0.030303 , 0.0294118 ] , [ 0.05 , 0.1 ] ] 769 [ [ -0.0166667 , 0.0384615 ] , [ 0.0114943 , 0.047619 ] +i [ 0.0434783 , 0 ] , [ 0.021978 , 0.0175439 ] ] 770 [ [ -0.037037 , 0.4 ] , [ 0.0204082 , 0.0212766 ] +i [ 0.03125 , -0.027027 ] , [ 0.028169 , 0.027027 ] ] 771 [ [ -0.0344828 , 0.0263158 ] , [ 0.0102041 , 0.030303 ] +i [ 0.0227273 , 0.0117647 ] , [ 0.0116279 , 0.016129 ] ] 772 [ [ 0 , 0.0126582 ] , [ 0.0208333 , 0.25 ] +i [ 0.01 , 0 ] , [ 0.0277778 , 0.025974 ] ] 773 [ [ 0.0105263 , 0.0151515 ] , [ 0.166667 , 0.0175439 ] +i [ 0.0350877 , -0.166667 ] , [ 0.025641 , 2 ] ] 774 [ [ -0.0322581 , 0.0208333 ] , [ 0.0740741 , 0.222222 ] +i [ 0.0246914 , 0.0123457 ] , [ 0.0240964 , 0.0344828 ] ] 775 [ [ 0.0153846 , 0.0689655 ] , [ 0.0172414 , 0.0163934 ] +i [ 0.0588235 , 0.0142857 ] , [ 0.0322581 , 0.0142857 ] ] 776 [ [ -0.0128205 , 0.0392157 ] , [ 0.0147059 , 0.0384615 ] +i [ 0.4 , 0.0294118 ] , [ 0.0104167 , 0.047619 ] ] 777 [ [ 0 , 0.0102041 ] , [ 0.25 , 0.016129 ] +i [ 0.0322581 , 0.0128205 ] , [ 0.181818 , 0.0117647 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 236 778 [ [ 0.0117647 , 0.0357143 ] , [ 0.030303 , 0.0107527 ] +i [ 0.0350877 , 0.0666667 ] , [ 0.0232558 , 0.0350877 ] ] 779 [ [ 0 , 0.0377358 ] , [ 0.0363636 , 0.166667 ] +i [ 0.0333333 , -0.0175439 ] , [ 0.016129 , 0.0243902 ] ] 780 [ [ 0.0144928 , 0.031746 ] , [ 0.0240964 , 0.0227273 ] +i [ 0.0120482 , 0 ] , [ 0.0136986 , 0.0208333 ] ] 781 [ [ -0.0166667 , 0.0869565 ] , [ 0.0434783 , 0.333333 ] +i [ 0.0625 , 0.03125 ] , [ 0.5 , 125 ] ] 782 [ [ 0.0344828 , 0.0136986 ] , [ 0.0240964 , 0.0175439 ] +i [ 0.0120482 , 0.0106383 ] , [ 0.0208333 , 0.0357143 ] ] 783 [ [ -0.0208333 , 0.2 ] , [ 0.05 , 0.010989 ] +i [ 0.0212766 , 0 ] , [ 0.0133333 , 0.0307692 ] ] 784 [ [ 0.010101 , 0.0344828 ] , [ 0.0363636 , 0.333333 ] +i [ 0.0235294 , 0 ] , [ 0.0123457 , 0.0571429 ] ] 785 [ [ 0 , 2 ] , [ 0.037037 , 0.0133333 ] +i [ 0.0204082 , -0.0106383 ] , [ 0.03125 , 0.105263 ] ] 786 [ [ 0.0181818 , 0.105263 ] , [ 0.0344828 , 0.25 ] +i [ 0.0147059 , 0 ] , [ 0.2 , 0.0869565 ] ] 787 [ [ -0.0196078 , 0.0235294 ] , [ 0.0606061 , 0.0238095 ] +i [ 0.0172414 , 0 ] , [ 0.0131579 , 0.0322581 ] ] 788 [ [ 0 , 0.0454545 ] , [ 0.0105263 , 0.0217391 ] +i [ 125 , -0.015873 ] , [ 0.037037 , 0.0263158 ] ] 789 [ [ -0.0151515 , 0.0138889 ] , [ 2 , 0.0111111 ] +i [ 0.0138889 , 0.1 ] , [ 0.0384615 ,2]] 790 [ [ -0.25 , 0.133333 ] , [ 0.0465116 , 0.027027 ] +i [ 1 , -0.333333 ] , [ 0.027027 , 0.0263158 ] ] 791 [ [ -0.25 , 0.025974 ] , [ 0.016129 , 0.0103093 ] +i [ 0.5 , -0.0204082 ] , [ 0.117647 , 0.0416667 ] ] 792 [ [ 0 , 0.0227273 ] , [ 0.03125 , 0.142857 ] +i [ 0.166667 , -0.0133333 ] , [ 0.0416667 , 0.0116279 ] ] 793 [ [ 0.03125 , 0.0104167 ] , [ 0.0833333 , 0.0123457 ] +i [ 0.117647 , 0.0833333 ] , [ 0.0298507 , 0.0408163 ] ] 794 [ [ 0 , 0.010101 ] , [ 0.0128205 , 0.0740741 ] +i [ 0.015873 , 0 ] , [ 0.0294118 , 0.011236 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 237 795 [ [ 0 , 0.0142857 ] , [ 0.0178571 , 0.0588235 ] +i [ 0.5 , 0.0769231 ] , [ 0.0133333 , 0.030303 ] ] 796 [ [ -0.0108696 , 0.08 ] , [ 0.5 , 0.111111 ] +i [ 0.025641 , -0.0357143 ] , [ 0.012987 , 0.0454545 ] ] 797 [ [ -0.0243902 , 0.04 ] , [ 0.0714286 , 0.0869565 ] +i [ 0.0222222 , 0 ] , [ 0.047619 , 0.2 ] ] 798 [ [ 0.0625 , 0.0384615 ] , [ 0.02 , 0.0357143 ] +i [ 0.0135135 , -0.2 ] , [ 0.012987 , 0.0444444 ] ] 799 [ [ 0.0107527 , 0.0625 ] , [ 0.0128205 , 0.0769231 ] +i [ 0.0212766 , 0 ] , [ 0.0147059 , 25 ] ] 800 [ [ 0.0151515 , 0.0555556 ] , [ 0.0123457 , 0.0240964 ] +i [ 0.0138889 , 0.0263158 ] , [ 0.028169 , 0.0153846 ] ] 801 [ [ -0.0192308 , 0.0175439 ] , [ 0.0277778 , 0.0833333 ] +i [ 0.5 , -0.0384615 ] , [ 0.0204082 , 1 ] ] 802 [ [ 0.0232558 , 1 ] , [ 0.0322581 , 0.0625 ] +i [ 0.181818 , 0.016129 ] , [ 0.0253165 , 0.0208333 ] ] 803 [ [ 0.0188679 , 0.0833333 ] , [ 0.0454545 , 125 ] +i [ 0.0555556 , 0.047619 ] , [ 0.0263158 , 0.0465116 ] ] 804 [ [ -0.0111111 , 25 ] , [ 1 , 2 ] +i [ 0.0416667 , 0 ] , [ 0.0273973 , 125 ] ] 805 [ [ -0.012987 , 0.0327869 ] , [ 0.0333333 , 0.0104167 ] +i [ 0.0232558 , 0.0212766 ] , [ 0.0606061 , 0.0294118 ] ] 806 [ [ 0.0175439 , 0.012987 ] , [ 0.0232558 , 0.0392157 ] +i [ 0.010101 , 0.0344828 ] , [ 0.0289855 , 0.04 ] ] 807 [ [ 0 , 0.0444444 ] , [ 0.0116279 , 0.0526316 ] +i [ 0.010989 , 0 ] , [ 0.111111 , 0.0232558 ] ] 808 [ [ 0.0153846 , 0.0273973 ] , [ 0.015625 , 0.0434783 ] +i [ 0.0392157 , 0.0212766 ] , [ 0.0555556 , 0.0666667 ] ] 809 [ [ 0 , 0.105263 ] , [ 0.0377358 , 0.0555556 ] +i [ 0.0487805 , -0.0153846 ] , [ 0.025641 , 0.0151515 ] ] 810 [ [ 0.0833333 , 0.0740741 ] , [ 0.04 , 0.0136986 ] +i [ 0.0246914 , 0.0227273 ] , [ 0.0113636 , 0.0833333 ] ] 811 [ [ -0.0120482 , 0.133333 ] , [ 0.047619 , 0.021978 ] +i [ 0.0384615 , 0 ] , [ 0.0240964 , 0.0869565 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 238 812 [ [ -0.0263158 , 0.0227273 ] , [ 0.025641 , 0.0232558 ] +i [ 0.0238095 , 0.0163934 ] , [ 0.0212766 , 0.0333333 ] ] 813 [ [ 1 , 0.0238095 ] , [ 0.037037 , 0.181818 ] +i [ 0.0206186 , 0 ] , [ 0.0434783 , 0.0298507 ] ] 814 [ [ 0 , 0.0142857 ] , [ 0.0172414 , 0.0133333 ] +i [ 0.0769231 , 0 ] , [ 0.0102041 , 0.0377358 ] ] 815 [ [ 0.0217391 , 0.0363636 ] , [ 0.0833333 , 0.0140845 ] +i [ 25 , 0 ] , [ 0.111111 , 0.0227273 ] ] 816 [ [ -0.012987 , 0.666667 ] , [ 0.0571429 , 0.0144928 ] +i [ 0.0465116 , 0 ] , [ 0.0307692 , 25 ] ] 817 [ [ 0.0136986 , 0.0116279 ] , [ 0.0181818 , 0.117647 ] +i [ 0.01 , 0.04 ] , [ 0.0555556 , 0.020202 ] ] 818 [ [ -0.0285714 , 0.133333 ] , [ 0.0116279 , 0.0625 ] +i [ 0.025641 , 0 ] , [ 0.0243902 , 0.0487805 ] ] 819 [ [ -0.0666667 , 0.0425532 ] , [ 0.0133333 , 0.020202 ] +i [ 0.0222222 , 0 ] , [ 0.047619 , 0.0104167 ] ] 820 [ [ -0.015873 , 0.0192308 ] , [ 0.111111 , 0.015873 ] +i [ 0.0215054 , 0 ] , [ 0.1 , 0.01 ] ] 821 [ [ 0.142857 , 0.0210526 ] , [ 0.015625 , 0.0588235 ] +i [ 0.0222222 , -0.0133333 ] , [ 0.025641 , 0.010101 ] ] 822 [ [ 0 , 0.0227273 ] , [ 0.0285714 , 0.0555556 ] +i [ 0.0119048 , 0 ] , [ 0.0444444 , 0.222222 ] ] 823 [ [ -0.016129 , 0.0689655 ] , [ 0.0238095 , 0.025641 ] +i [ 0.0384615 , 0.0120482 ] , [ 0.166667 , 0.0253165 ] ] 824 [ [ 0.015873 , 0.030303 ] , [ 0.0119048 , 0.0377358 ] +i [ 0.0238095 , -0.0212766 ] , [ 0.0266667 , 0.0392157 ] ] 825 [ [ -0.015625 , 0.0327869 ] , [ 0.0289855 , 0.0434783 ] +i [ 25 , 0.5 ] , [ 0.0140845 , 0.0106383 ] ] 826 [ [ -0.0263158 , 0.0149254 ] , [ 0.031746 , 0.0338983 ] +i [ 0.0434783 , 0.0126582 ] , [ 0.0384615 , 0.0166667 ] ] 827 [ [ 25 , 0.0208333 ] , [ 0.0666667 , 0.015625 ] +i [ 0.0119048 , -0.2 ] , [ 0.02 , 0.0116279 ] ] 828 [ [ -0.0178571 , 0.2 ] , [ 0.0253165 , 1 ] +i [ 0.04 , -0.0217391 ] , [ 0.0298507 , 0.0909091 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 239 829 [ [ 0 , 0.04 ] , [ 0.0126582 , 0.0666667 ] +i [ 0.0294118 , -0.0181818 ] , [ 0.0106383 , 0.0227273 ] ] 830 [ [ -0.011236 , 0.0285714 ] , [ 0.0294118 , 0.0333333 ] +i [ 0.0125 , 0.0131579 ] , [ 0.0416667 , 0.025641 ] ] 831 [ [ 0 , 0.0273973 ] , [ 1 , 0.0384615 ] +i [ 0.0235294 , -0.0131579 ] , [ 0.0140845 , 0.0625 ] ] 832 [ [ 0.0769231 , 0.031746 ] , [ 0.0204082 , 0.0106383 ] +i [ 0.0465116 , 0.016129 ] , [ 0.0126582 , 0.0363636 ] ] 833 [ [ 0 , 0.0243902 ] , [ 0.0204082 , 0.0188679 ] +i [ 0.0555556 , 0 ] , [ 0.0172414 , 0.0273973 ] ] 834 [ [ 0 , 0.0113636 ] , [ 0.0540541 , 0.0113636 ] +i [ 0.0322581 , 0.0181818 ] , [ 0.0555556 , 0.0285714 ] ] 835 [ [ 0 , 0.0185185 ] , [ 0.333333 , 0.0232558 ] +i [ 0.0147059 , -0.0625 ] , [ 0.020202 , 0.0235294 ] ] 836 [ [ 0.0126582 , 0.0952381 ] , [ 0.0235294 , 0.0151515 ] +i [ 0.0215054 , -0.01 ] , [ 0.0212766 , 0.0416667 ] ] 837 [ [ 0 , 0.25 ] , [ 0.0363636 , 0.0294118 ] +i [ 0.0208333 , 0 ] , [ 0.0344828 , 0.0172414 ] ] 838 [ [ 0 , 0.0212766 ] , [ 0.333333 , 0.08 ] +i [ 0.0144928 , 0 ] , [ 0.0416667 , 0.133333 ] ] 839 [ [ -0.0136986 , 0.0350877 ] , [ 0.1 , 0.142857 ] +i [ 0.0377358 , 0 ] , [ 0.0131579 , 0.0350877 ] ] 840 [ [ 0 , 0.03125 ] , [ 0.02 , 0.0103093 ] +i [ 0.0185185 , -0.0140845 ] , [ 0.0434783 , 0.0131579 ] ] 841 [ [ 0.0285714 , 0.0192308 ] , [ 0.0116279 , 0.4 ] +i [ 0.0416667 , 0 ] , [ 0.0909091 , 0.0666667 ] ] 842 [ [ 0 , 0.0240964 ] , [ 0.0210526 , 0.0204082 ] +i [ 0.01 , 0 ] , [ 0.25 , 0.021978 ] ] 843 [ [ -25 , 2 ] , [ 0.0105263 , 0.0103093 ] +i [ 0.0227273 , -0.0153846 ] , [ 0.0555556 , 0.0416667 ] ] 844 [ [ -0.0169492 , 0.0178571 ] , [ 0.0178571 , 0.0114943 ] +i [ 0.011236 , 0 ] , [ 0.0133333 , 0.333333 ] ] 845 [ [ 0.0212766 , 0.0606061 ] , [ 0.0208333 , 0.0128205 ] +i [ 0.0588235 , 0 ] , [ 0.0909091 , 0.030303 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 240 846 [ [ 0 , 125 ] , [ 0.0487805 , 0.0377358 ] +i [ 0.111111 , 0.0104167 ] , [ 0.030303 , 0.142857 ] ] 847 [ [ -0.0113636 , 0.105263 ] , [ 0.010989 , 0.25 ] +i [ 0.0666667 , 0.030303 ] , [ 0.0273973 , 0.0169492 ] ] 848 [ [ 0.0192308 , 0.047619 ] , [ 0.0125 , 0.0357143 ] +i [ 0.0555556 , -0.0147059 ] , [ 0.0178571 , 0.027027 ] ] 849 [ [ 0 , 0.285714 ] , [ 0.020202 , 0.0714286 ] +i [ 0.333333 , 0.0192308 ] , [ 0.0131579 , 0.0181818 ] ] 850 [ [ -0.0114943 , 0.0116279 ] , [ 0.031746 , 0.0454545 ] +i [ 0.020202 , 0 ] , [ 0.0238095 , 0.0227273 ] ] 851 [ [ 0 , 0.0215054 ] , [ 0.0625 , 0.0151515 ] +i [ 0.0121951 , 0 ] , [ 0.0222222 , 0.0540541 ] ] 852 [ [ -0.05 , 0.0235294 ] , [ 125 , 0.02 ] +i [ 0.4 , -0.0133333 ] , [ 0.030303 , 0.0416667 ] ] 853 [ [ -0.0769231 , 0.02 ] , [ 0.133333 , 0.0322581 ] +i [ 0.02 , -0.0104167 ] , [ 2 , 0.2 ] ] 854 [ [ -0.0126582 , 0.0714286 ] , [ 0.0333333 , 0.142857 ] +i [ 0.030303 , 0 ] , [ 0.021978 , 0.0204082 ] ] 855 [ [ 0 , 0.0215054 ] , [ 0.0294118 , 0.0266667 ] +i [ 0.0384615 , 0 ] , [ 0.0909091 , 0.0666667 ] ] 856 [ [ 0.0163934 , 0.0103093 ] , [ 0.0166667 , 0.0138889 ] +i [ 0.666667 , 0 ] , [ 0.0169492 , 0.027027 ] ] 857 [ [ -0.0140845 , 0.0114943 ] , [ 0.0121951 , 0.166667 ] +i [ 0.0229885 , 0 ] , [ 0.0285714 , 0.166667 ] ] 858 [ [ 0.0263158 , 0.666667 ] , [ 0.0357143 , 0.666667 ] +i [ 0.0322581 , -0.01 ] , [ 0.0217391 , 0.0714286 ] ] 859 [ [ 0 , 0.5 ] , [ 0.0740741 , 0.0363636 ] +i [ 25 , -0.0103093 ] , [ 0.0487805 , 0.285714 ] ] 860 [ [ 0.0175439 , 0.1 ] , [ 0.047619 , 0.028169 ] +i [ 0.0909091 , -0.05 ] , [ 0.01 , 0.0144928 ] ] 861 [ [ -0.010989 , 0.0833333 ] , [ 0.047619 , 0.0121951 ] +i [ 0.0126582 , 0.0120482 ] , [ 0.25 , 0.0102041 ] ] 862 [ [ 0.0140845 , 0.222222 ] , [ 0.037037 , 0.05 ] +i [ 0.025974 , 0 ] , [ 0.0263158 , 0.0344828 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 241 863 [ [ -0.0144928 , 0.0377358 ] , [ 0.0163934 , 0.025641 ] +i [ 0.0114943 , 0.0555556 ] , [ 1 , 0.0212766 ] ] 864 [ [ 0 , 0.0144928 ] , [ 0.0322581 , 0.142857 ] +i [ 0.0444444 , -0.0135135 ] , [ 0.2 , 0.0175439 ] ] 865 [ [ -0.0294118 , 0.010989 ] , [ 0.0232558 , 0.020202 ] +i [ 0.0144928 , 0 ] , [ 0.5 , 0.027027 ] ] 866 [ [ 0.5 , 0.0555556 ] , [ 0.0434783 , 0.0104167 ] +i [ 0.0434783 , 0 ] , [ 0.5 , 0.0103093 ] ] 867 [ [ 0 , 0.0104167 ] , [ 0.0392157 , 0.0606061 ] +i [ 0.0263158 , -0.0147059 ] , [ 0.0555556 , 0.02 ] ] 868 [ [ 0.0104167 , 0.027027 ] , [ 0.0338983 , 0.020202 ] +i [ 0.027027 , 0 ] , [ 0.0833333 , 0.0357143 ] ] 869 [ [ 0 , 0.0208333 ] , [ 0.0185185 , 0.0133333 ] +i [ 0.0952381 , 0.0833333 ] , [ 0.0125 , 0.25 ] ] 870 [ [ 0 , 0.0273973 ] , [ 0.0377358 , 0.0645161 ] +i [ 0.0454545 , -0.0909091 ] , [ 0.0232558 , 0.0384615 ] ] 871 [ [ -0.0434783 , 0.0307692 ] , [ 0.016129 , 0.0363636 ] +i [ 0.333333 , 0.0113636 ] , [ 0.0645161 , 0.0208333 ] ] 872 [ [ 0.0181818 , 0.0384615 ] , [ 0.25 , 0.0454545 ] +i [ 0.0125 , -0.142857 ] , [ 0.0769231 , 0.0212766 ] ] 873 [ [ 0.02 , 0.0327869 ] , [ 1 , 0.025641 ] +i [ 0.0425532 , 0 ] , [ 0.0338983 , 0.0243902 ] ] 874 [ [ -0.0138889 , 0.0111111 ] , [ 0.2 , 0.0188679 ] +i [ 0.0119048 , 0 ] , [ 0.0107527 , 0.0212766 ] ] 875 [ [ 0 , 0.0253165 ] , [ 125 , 0.03125 ] +i [ 0.0555556 , 0.0166667 ] , [ 0.0175439 , 0.0111111 ] ] 876 [ [ 0 , 2 ] , [ 0.0185185 , 125 ] +i [ 0.0344828 , 0.0144928 ] , [ 0.0235294 , 0.0425532 ] ] 877 [ [ 0 , 0.03125 ] , [ 0.025641 , 0.0263158 ] +i [ 0.181818 , 0.1 ] , [ 0.0153846 , 0.0126582 ] ] 878 [ [ 0 , 0.222222 ] , [ 2 , 0.0229885 ] +i [ 0.0294118 , 0.0126582 ] , [ 0.0196078 , 0.0512821 ] ] 879 [ [ -0.0232558 , 0.028169 ] , [ 0.0434783 , 0.0294118 ] +i [ 0.01 , -0.0172414 ] , [ 25 , 0.0232558 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 242 880 [ [ 0 , 25 ] , [ 0.0178571 , 0.0645161 ] +i [ 0.05 , -0.012987 ] , [ 0.1 , 0.0277778 ]] 881 [ [ 0.0625 , 0.03125 ] , [ 0.1 , 0.0147059 ] +i [ 0.0172414 , 0 ] , [ 0.0119048 , 0.0357143 ] ] 882 [ [ 0.0135135 , 0.5 ] , [ 0.0344828 , 0.25 ] +i [ 0.142857 , 0 ] , [ 0.0263158 , 0.0740741 ] ] 883 [ [ 0 , 0.0869565 ] , [ 0.0454545 , 0.0119048 ] +i [ 0.0204082 , -0.5 ] , [ 0.0392157 , 0.0229885 ] ] 884 [ [ 0.05 , 0.0487805 ] , [ 0.0384615 , 0.0454545 ] +i [ 0.0217391 , 0.0344828 ] , [ 0.020202 , 0.05 ] ] 885 [ [ 0 , 0.0289855 ] , [ 0.0188679 , 0.2 ] +i [ 0.0526316 , 0 ] , [ 0.0465116 , 0.0240964 ] ] 886 [ [ -0.0243902 , 0.0229885 ] , [ 0.0175439 , 0.25 ] +i [ 0.0240964 , 0.0175439 ] , [ 0.153846 , 0.047619 ] ] 887 [ [ 0 , 0.0540541 ] , [ 0.0263158 , 0.105263 ] +i [ 0.02 , 0.0106383 ] , [ 0.0217391 , 0.0185185 ] ] 888 [ [ 0.0625 , 125 ] , [ 0.0107527 , 0.0512821 ] +i [ 0.0333333 , 0 ] , [ 0.333333 , 0.0465116 ] ] 889 [ [ -0.0185185 , 0.0277778 ] , [ 0.0210526 , 0.0243902 ] +i [ 0.0512821 , 0.0131579 ] , [ 0.0740741 , 0.037037 ] ] 890 [ [ -0.0294118 , 0.027027 ] , [ 0.2 , 0.0740741 ] +i [ 0.142857 , 0 ] , [ 0.0952381 , 0.011236 ] ] 891 [ [ 125 , 0.0104167 ] , [ 0.0408163 , 0.0350877 ] +i [ 0.0166667 , 0.0113636 ] , [ 0.0153846 , 0.0714286 ] ] 892 [ [ 0.0384615 , 0.0169492 ] , [ 0.010101 , 0.0625 ] +i [ 0.0416667 , 0.0116279 ] , [ 0.025641 , 2 ] ] 893 [ [ -0.0204082 , 0.0212766 ] , [ 0.0188679 , 0.2 ] +i [ 0.0833333 , -0.0166667 ] , [ 0.0322581 , 25 ] ] 894 [ [ 0.0163934 , 0.0434783 ] , [ 0.2 , 0.0344828 ] +i [ 0.0571429 , 0 ] , [ 0.0192308 , 0.105263 ] ] 895 [ [ 0.0119048 , 0.0289855 ] , [ 0.04 , 0.0512821 ] +i [ 0.117647 , 0.0114943 ] , [ 0.0206186 , 0.027027 ] ] 896 [ [ -0.02 , 0.05 ] , [ 0.027027 , 0.027027 ] +i [ 0.0208333 , -0.025641 ] , [ 0.0153846 , 0.028169 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 243 897 [ [ -0.0107527 , 0.1 ] , [ 0.0120482 , 0.0588235 ] +i [ 0.0113636 , 0.0454545 ] , [ 0.0151515 , 0.0294118 ] ] 898 [ [ 0.0217391 , 0.0454545 ] , [ 0.010989 , 0.0131579 ] +i [ 0.0116279 , 0.0128205 ] , [ 0.1 , 0.25 ] ] 899 [ [ -0.0151515 , 0.0263158 ] , [ 0.025974 , 125 ] +i [ 0.0108696 , 0.0125 ] , [ 0.0769231 , 0.142857 ] ] 900 [ [ -0.0136986 , 0.0106383 ] , [ 0.0344828 , 0.01 ] +i [ 0.0151515 , 0.01 ] , [ 0.027027 , 125 ] ] 901 [ [ 0.015625 , 0.0285714 ] , [ 0.0215054 , 0.0666667 ] +i [ 0.0769231 , 0 ] , [ 0.5 , 0.027027 ] ] 902 [ [ 0.0333333 , 0.037037 ] , [ 0.0117647 , 0.4 ] +i [ 0.0333333 , -0.0714286 ] , [ 0.117647 , 0.0689655 ] ] 903 [ [ -0.0384615 , 0.027027 ] , [ 0.0243902 , 0.037037 ] +i [ 0.0273973 , 1 ] , [ 0.4 , 0.037037 ] ] 904 [ [ 0 , 0.08 ] , [ 0.0350877 , 0.0869565 ] +i [ 0.0645161 , -0.0181818 ] , [ 0.0128205 , 0.0125 ] ] 905 [ [ -0.0384615 , 0.0714286 ] , [ 0.0140845 , 0.0540541 ] +i [ 0.027027 , 0 ] , [ 0.0392157 , 0.0555556 ] ] 906 [ [ 0 , 0.0121951 ] , [ 0.1 , 0.0185185 ] +i [ 0.0625 , 0 ] , [ 0.0188679 , 0.0208333 ]] 907 [ [ 0.0625 , 0.0408163 ] , [ 0.0333333 , 0.037037 ] +i [ 0.0103093 , -25 ] , [ 0.0128205 , 0.0120482 ] ] 908 [ [ 0 , 0.153846 ] , [ 0.25 , 0.027027 ] +i [ 0.027027 , 0 ] , [ 0.0111111 , 0.010989 ]] 909 [ [ 0.047619 , 0.333333 ] , [ 0.0212766 , 0.0350877 ] +i [ 0.0327869 , 0 ] , [ 0.0465116 , 0.0487805 ] ] 910 [ [ 125 , 0.0120482 ] , [ 0.0147059 , 0.0246914 ] +i [ 0.0384615 , -0.0555556 ] , [ 0.0185185 , 0.0740741 ] ] 911 [ [ -0.0243902 , 0.181818 ] , [ 0.0465116 , 0.0235294 ] +i [ 0.04 , -0.015625 ] , [ 0.0114943 , 0.333333 ] ] 912 [ [ -0.0333333 , 0.0285714 ] , [ 0.0208333 , 0.016129 ] +i [ 0.0253165 , 0 ] , [ 0.010989 , 0.0212766 ] ] 913 [ [ -0.0126582 , 0.0175439 ] , [ 0.0117647 , 0.047619 ] +i [ 0.030303 , 0.0588235 ] , [ 0.0333333 , 0.0294118 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 244 914 [ [ 0 , 0.0215054 ] , [ 0.0714286 , 0.0714286 ] +i [ 0.0555556 , 0 ] , [ 0.010101 , 0.0769231 ] ] 915 [ [ -0.0192308 , 0.0289855 ] , [ 0.0357143 , 0.0434783 ] +i [ 0.166667 , 0.0333333 ] , [ 0.25 , 0.0227273 ] ] 916 [ [ -0.0153846 , 0.0454545 ] , [ 0.0125 , 0.0210526 ] +i [ 0.0666667 , -0.0120482 ] , [ 0.0119048 , 0.133333 ] ] 917 [ [ -0.0909091 , 0.05 ] , [ 0.0416667 , 2 ] +i [ 0.0192308 , 0.2 ] , [ 1 , 0.0285714 ]] 918 [ [ 0 , 2 ] , [ 0.0238095 , 0.111111 ] +i [ 2 , 0.0125 ] , [ 0.166667 , 0.0266667 ] ] 919 [ [ -0.0188679 , 0.0163934 ] , [ 0.0117647 , 0.0833333 ] +i [ 0.0238095 , 0.0138889 ] , [ 0.0377358 , 0.0153846 ] ] 920 [ [ 0 , 0.0232558 ] , [ 0.0408163 , 0.0181818 ] +i [ 0.0104167 , 0 ] , [ 0.0188679 , 0.0144928 ] ] 921 [ [ -0.0769231 , 0.0117647 ] , [ 0.0227273 , 0.0322581 ] +i [ 0.0588235 , 0 ] , [ 0.181818 , 0.0526316 ] ] 922 [ [ -0.04 , 0.0217391 ] , [ 0.031746 , 0.0208333 ] +i [ 0.0123457 , 0 ] , [ 0.0540541 , 0.0125 ] ] 923 [ [ -0.03125 , 0.0294118 ] , [ 0.0210526 , 0.25 ] +i [ 0.0350877 , -0.0125 ] , [ 0.333333 , 0.02 ] ] 924 [ [ 0 , 0.0217391 ] , [ 0.142857 , 0.027027 ] +i [ 0.0833333 , -125 ] , [ 0.0149254 , 0.0123457 ] ] 925 [ [ 0.016129 , 0.0769231 ] , [ 0.0465116 , 0.0444444 ] +i [ 0.0144928 , 0.0188679 ] , [ 0.0113636 , 0.133333 ] ] 926 [ [ 0 , 0.0208333 ] , [ 0.0377358 , 0.0238095 ] +i [ 0.0119048 , 0 ] , [ 0.0285714 , 0.0714286 ] ] 927 [ [ 0.0172414 , 0.0350877 ] , [ 0.08 , 0.028169 ] +i [ 0.0232558 , 0 ] , [ 0.05 , 0.0206186 ] ] 928 [ [ 0.0243902 , 0.0243902 ] , [ 0.0294118 , 0.02 ] +i [ 0.0121951 , -0.0434783 ] , [ 0.0444444 , 0.0104167 ] ] 929 [ [ -0.0188679 , 0.0144928 ] , [ 0.028169 , 0.0263158 ] +i [ 0.0133333 , 0.0188679 ] , [ 0.142857 , 0.0185185 ] ] 930 [ [ 0.0128205 , 0.0909091 ] , [ 0.111111 , 0.0108696 ] +i [ 0.0909091 , -0.142857 ] , [ 0.117647 , 0.0114943 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 245 931 [ [ -0.0555556 , 0.0125 ] , [ 0.0229885 , 0.5 ] +i [ 0.0238095 , 0.0666667 ] , [ 0.0151515 , 0.0833333 ] ] 932 [ [ 0 , 0.0222222 ] , [ 0.0108696 , 0.027027 ] +i [ 0.666667 , -0.0133333 ] , [ 0.0229885 , 0.0126582 ] ] 933 [ [ 0.0151515 , 0.0222222 ] , [ 0.0277778 , 0.021978 ] +i [ 0.0253165 , 0.0144928 ] , [ 0.1 , 1 ] ] 934 [ [ -0.0114943 , 0.0217391 ] , [ 0.01 , 0.181818 ] +i [ 0.0408163 , 0.0123457 ] , [ 0.285714 , 0.025974 ] ] 935 [ [ -0.0208333 , 0.027027 ] , [ 0.0204082 , 0.03125 ] +i [ 0.015873 , -0.333333 ] , [ 0.0147059 , 0.0210526 ] ] 936 [ [ -0.01 , 0.0740741 ] , [ 0.0222222 , 0.0102041 ] +i [ 0.333333 , 0.0212766 ] , [ 0.0444444 , 0.0540541 ] ] 937 [ [ 0.0107527 , 0.0253165 ] , [ 0.0833333 , 0.0322581 ] +i [ 0.0327869 , 0.03125 ] , [ 0.0114943 , 0.0133333 ] ] 938 [ [ -0.0212766 , 0.0769231 ] , [ 0.0465116 , 0.02 ] +i [ 0.0266667 , -0.0188679 ] , [ 0.0588235 , 0.0571429 ] ] 939 [ [ 0 , 0.0253165 ] , [ 0.0108696 , 0.117647 ] +i [ 0.0224719 , 0.0277778 ] , [ 0.0645161 , 0.0217391 ] ] 940 [ [ 0 , 0.0111111 ] , [ 0.285714 , 0.0232558 ] +i [ 0.037037 , 0 ] , [ 0.0357143 , 0.0298507 ] ] 941 [ [ 0 , 0.142857 ] , [ 0.0769231 , 0.0144928 ] +i [ 0.111111 , 0 ] , [ 0.025974 , 0.1 ] ] 942 [ [ 0.0103093 , 0.027027 ] , [ 0.181818 , 0.0645161 ] +i [ 0.0169492 , -0.0714286 ] , [ 125 , 25 ] ] 943 [ [ -0.0120482 , 0.0512821 ] , [ 0.133333 , 0.0106383 ] +i [ 0.0833333 , 0.02 ] , [ 0.025641 , 0.0246914 ] ] 944 [ [ -0.015625 , 0.0344828 ] , [ 0.0289855 , 0.0408163 ] +i [ 0.0294118 , 0.027027 ] , [ 0.028169 , 0.0126582 ] ] 945 [ [ 0 , 0.0232558 ] , [ 0.0344828 , 0.333333 ] +i [ 0.0108696 , -0.0416667 ] , [ 0.05 , 0.0416667 ] ] 946 [ [ 0.0106383 , 0.0327869 ] , [ 0.0363636 , 0.02 ] +i [ 0.1 , 0.25 ] , [ 0.0181818 , 125 ] ] 947 [ [ -0.0227273 , 0.020202 ] , [ 0.0151515 , 0.0246914 ] +i [ 0.0526316 , 0.030303 ] , [ 0.0123457 , 0.012987 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 246 948 [ [ -0.0116279 , 0.0105263 ] , [ 0.0909091 , 0.05 ] +i [ 0.181818 , 0.0142857 ] , [ 0.0222222 , 0.0285714 ] ] 949 [ [ -0.0138889 , 0.666667 ] , [ 0.020202 , 0.0246914 ] +i [ 0.0588235 , 0.0106383 ] , [ 0.025641 , 0.0104167 ] ] 950 [ [ -0.0125 , 0.0116279 ] , [ 0.0909091 , 0.166667 ] +i [ 0.0555556 , 0 ] , [ 0.111111 , 0.03125 ] ] 951 [ [ 0 , 0.0103093 ] , [ 0.0222222 , 0.05 ] +i [ 0.0111111 , 0.0454545 ] , [ 0.03125 , 25 ] ] 952 [ [ 0.0107527 , 0.0222222 ] , [ 0.0327869 , 0.04 ] +i [ 0.666667 , 0 ] , [ 0.0606061 , 0.142857 ] ] 953 [ [ 0.0125 , 0.0769231 ] , [ 0.0333333 , 0.0215054 ] +i [ 0.4 , -0.0175439 ] , [ 0.0434783 , 0.0169492 ] ] 954 [ [ -0.0769231 , 0.0117647 ] , [ 0.0625 , 0.0454545 ] +i [ 0.0163934 , -0.0181818 ] , [ 0.047619 , 0.010989 ] ] 955 [ [ 0.25 , 0.0125 ] , [ 0.0606061 , 0.015873 ] +i [ 0.027027 , 0 ] , [ 0.0645161 , 0.025641 ] ] 956 [ [ 0 , 0.0277778 ] , [ 0.0208333 , 0.025641 ] +i [ 0.025974 , -0.0434783 ] , [ 0.0294118 , 0.025974 ] ] 957 [ [ 0 , 0.0163934 ] , [ 0.0121951 , 0.0175439 ] +i [ 0.02 , 0.0384615 ] , [ 0.0185185 , 0.0377358 ] ] 958 [ [ 0.03125 , 0.0222222 ] , [ 0.047619 , 0.111111 ] +i [ 0.0106383 , 0.0204082 ] , [ 0.0117647 , 0.117647 ] ] 959 [ [ 0 , 0.117647 ] , [ 0.0327869 , 0.0833333 ] +i [ 0.0606061 , 0.0120482 ] , [ 0.025641 , 0.0117647 ] ] 960 [ [ 0.0125 , 0.0350877 ] , [ 0.0909091 , 0.666667 ] +i [ 0.0246914 , -0.037037 ] , [ 0.0208333 , 0.0588235 ] ] 961 [ [ 0.0125 , 1 ] , [ 0.05 , 0.0625 ] +i [ 0.0102041 , 0 ] , [ 0.0243902 , 0.0285714 ] ] 962 [ [ -0.0333333 , 0.0140845 ] , [ 0.0204082 , 0.0125 ] +i [ 0.0689655 , 0 ] , [ 0.08 , 0.0217391 ] ] 963 [ [ 0 , 0.0111111 ] , [ 0.153846 , 0.04 ] +i [ 125 , 0 ] , [ 0.0740741 , 0.0588235 ] ] 964 [ [ 0 , 0.0210526 ] , [ 0.0243902 , 0.027027 ] +i [ 0.0392157 , 0.0103093 ] , [ 0.0138889 , 0.133333 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 247 965 [ [ -0.0126582 , 0.04 ] , [ 0.04 , 0.0102041 ] +i [ 0.0416667 , 0.0238095 ] , [ 0.0285714 , 0.0120482 ] ] 966 [ [ -0.012987 , 0.0588235 ] , [ 0.0645161 , 0.0588235 ] +i [ 0.0181818 , 0.0222222 ] , [ 0.0224719 , 0.0666667 ] ] 967 [ [ 0 , 1 ] , [ 0.0117647 , 0.027027 ] +i [ 0.222222 , 0.0107527 ] , [ 0.0196078 , 0.04 ] ] 968 [ [ 0.0120482 , 0.0151515 ] , [ 0.0136986 , 0.4 ] +i [ 0.0277778 , 0 ] , [ 0.0344828 , 0.0322581 ] ] 969 [ [ 0 , 0.05 ] , [ 0.0689655 , 0.0192308 ] +i [ 0.0263158 , -0.016129 ] , [ 0.0102041 , 0.0392157 ] ] 970 [ [ 0.333333 , 0.0952381 ] , [ 0.0243902 , 0.0135135 ] +i [ 0.0240964 , 0.0128205 ] , [ 0.0454545 , 0.047619 ] ] 971 [ [ 0 , 0.0606061 ] , [ 0.016129 , 0.0294118 ] +i [ 0.0123457 , 0 ] , [ 0.0384615 , 0.0232558 ] ] 972 [ [ 0.0172414 , 0.030303 ] , [ 0.0327869 , 0.0740741 ] +i [ 0.0140845 , 0 ] , [ 0.0588235 , 0.0232558 ] ] 973 [ [ 0.0208333 , 0.0153846 ] , [ 0.0208333 , 0.0136986 ] +i [ 0.0425532 , -0.25 ] , [ 0.010101 , 0.0128205 ] ] 974 [ [ -0.0909091 , 0.0285714 ] , [ 0.0322581 , 0.0487805 ] +i [ 0.0144928 , 0.0344828 ] , [ 0.0212766 , 0.0206186 ] ] 975 [ [ 0.027027 , 0.0229885 ] , [ 0.0266667 , 0.0172414 ] +i [ 0.0116279 , 0 ] , [ 0.0416667 , 0.0277778 ] ] 976 [ [ 0.0322581 , 0.0263158 ] , [ 0.4 , 0.04 ] +i [ 0.25 , 0.047619 ] , [ 0.0111111 , 0.0215054 ] ] 977 [ [ 0 , 0.0120482 ] , [ 0.142857 , 0.047619 ] +i [ 0.0138889 , -0.0169492 ] , [ 0.05 , 0.0178571 ] ] 978 [ [ -0.0107527 , 0.5 ] , [ 125 , 0.0166667 ] +i [ 0.0350877 , 0.0136986 ] , [ 0.0133333 , 0.0571429 ] ] 979 [ [ 0.0357143 , 0.142857 ] , [ 0.25 , 0.0217391 ] +i [ 0.0333333 , 0.0222222 ] , [ 0.117647 , 0.0232558 ] ] 980 [ [ 0 , 0.0869565 ] , [ 0.0235294 , 0.0206186 ] +i [ 0.0555556 , 0 ] , [ 0.0666667 , 0.0425532 ] ] 981 [ [ -0.0103093 , 0.0555556 ] , [ 0.0263158 , 0.0131579 ] +i [ 0.0666667 , 0.142857 ] , [ 0.08 , 0.0106383 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 248 982 [ [ -0.0172414 , 0.0227273 ] , [ 0.0140845 , 0.0454545 ] +i [ 0.0138889 , 0 ] , [ 0.0289855 , 0.0487805 ] ] 983 [ [ 0 , 0.0222222 ] , [ 0.0204082 , 0.025974 ] +i [ 0.0625 , 0.0133333 ] , [ 0.0126582 , 0.0294118 ] ] 984 [ [ 0 , 0.0434783 ] , [ 0.0689655 , 0.0163934 ] +i [ 0.117647 , 0.0147059 ] , [ 0.0227273 , 0.0208333 ] ] 985 [ [ 0.0416667 , 0.037037 ] , [ 0.012987 , 0.666667 ] +i [ 0.1 , -0.0227273 ] , [ 0.0106383 , 0.0212766 ] ] 986 [ [ 0.0344828 , 0.0327869 ] , [ 0.0123457 , 0.25 ] +i [ 0.0952381 , 0.0204082 ] , [ 1 , 0.0117647 ] ] 987 [ [ -0.0107527 , 0.0285714 ] , [ 0.0740741 , 0.0103093 ] +i [ 0.0606061 , 0 ] , [ 0.0138889 , 0.0714286 ] ] 988 [ [ 0.0131579 , 0.027027 ] , [ 0.142857 , 0.0416667 ] +i [ 0.0204082 , -0.0163934 ] , [ 0.0714286 , 0.0178571 ] ] 989 [ [ 0 , 0.0952381 ] , [ 0.0606061 , 0.0444444 ] +i [ 0.0526316 , 0.0714286 ] , [ 0.0217391 , 0.0434783 ] ] 990 [ [ 0 , 0.0266667 ] , [ 0.0125 , 0.0689655 ] +i [ 0.03125 , 0.0125 ] , [ 0.25 , 0.0188679 ] ] 991 [ [ -0.0111111 , 0.0246914 ] , [ 0.02 , 0.0107527 ] +i [ 0.0196078 , -25 ] , [ 0.037037 , 0.0147059 ] ] 992 [ [ -0.0102041 , 0.0232558 ] , [ 0.0298507 , 0.0128205 ] +i [ 0.0416667 , 0 ] , [ 0.25 , 0.0119048 ] ] 993 [ [ -0.0133333 , 0.0178571 ] , [ 0.0689655 , 0.0102041 ] +i [ 0.0175439 , 0 ] , [ 0.0294118 , 0.0425532 ] ] 994 [ [ -1 , 0.0222222 ] , [ 0.0434783 , 0.5 ] +i [ 0.0243902 , 0 ] , [ 0.0243902 , 0.0204082 ] ] 995 [ [ 0 , 1 ] , [ 0.0229885 , 0.0666667 ] +i [ 0.0416667 , 0 ] , [ 0.0208333 , 0.0149254 ] ] 996 [ [ 0.0322581 , 0.142857 ] , [ 0.02 , 0.0625 ] +i [ 0.0227273 , 0.0285714 ] , [ 0.0322581 , 0.037037 ] ] 997 [ [ 0.0138889 , 0.0263158 ] , [ 0.2 , 0.0238095 ] +i [ 0.0206186 , 0.0526316 ] , [ 0.0119048 , 0.0350877 ] ] 998 [ [ -0.0285714 , 0.0322581 ] , [ 0.0128205 , 0.0416667 ] +i [ 0.0769231 , 0.0138889 ] , [ 0.0625 , 0.021978 ] ] ANEXO E. COMPLEXOS INTERVALARES UTILIZADOS NO TESTE T 249 999 [ [ 0.0119048 , 0.0107527 ] , [ 0.0588235 , 0.4 ] +i [ 0.0133333 , 0.5 ] , [ 0.0909091 , 0.0163934 ] ] 1000 [ [ 0 , 0.111111 ] , [ 0.027027 , 0.0131579 ] +i [ 0.0338983 , 0.01 ] , [ 0.0333333 , 0.0327869 ] ]