UNIVERSIDADE DO RIO GRANDE DO NORTEFEDERAL UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA PROGRAMA DE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃ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 obser- vaçõ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 Mon- teiro 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 po- der computacional da biblioteca JAVA-XSC, sendo XSC1 um acrônimo para “Language Extensions for Scientific Computation”. Essa biblioteca é na verdade uma extensão da lin- guagem 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 execu- tam programas JAVA. Palavras-chave: JAVA, JAVA-XSC, Matemática Intervalar, Números Complexos, Números Complexos Intervalares. 1http://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 Com- putation”. 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.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Números complexos 6 2.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Os Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.1 Representação Algébrica . . . . . . . . . . . . . . . . . . . . . . 9 2.2.2 Representação Polar . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.3 Funções Complexas Elementares . . . . . . . . . . . . . . . . . 14 2.3 Números complexos intervalares . . . . . . . . . . . . . . . . . . . . . . 16 2.3.1 Aritmética Intervalar Real . . . . . . . . . . . . . . . . . . . . . 16 2.3.2 Aritmética Complexa Intervalar Retangular . . . . . . . . . . . . 18 2.3.3 Aritmética Complexa Intervalar Circular . . . . . . . . . . . . . 19 2.3.4 Aritmética Complexa Intervalar Usando a Forma Polar . . . . . . 20 2.3.5 Funções Complexas Intervalares Elementares . . . . . . . . . . . 22 2.4 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3 Algumas ferramentas para cálculo numérico 26 3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.2 CLN (Class Library for Numbers) . . . . . . . . . . . . . . . . . . . . . 26 3.2.1 Tipos Numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2.2 Números Exatos . . . . . . . . . . . . . . . . . . . . . . . . . . 27 i 3.2.3 Números de Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . 29 3.2.4 Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.5 Funções de Arredondamento . . . . . . . . . . . . . . . . . . . . 30 3.3 GNU MP (GMP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.3.1 Números Racionais . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3.2 Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.4 MPFR (Multiple Precision Floating-Point Reliable) . . . . . . . . . . . . 33 3.4.1 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . 33 3.4.2 Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.5 MPFI (Multiple Precision Floating-Point Interval) . . . . . . . . . . . . 35 3.5.1 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . 36 3.6 MPC (Multiple Precision Complex) . . . . . . . . . . . . . . . . . . . . 36 3.6.1 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . 36 3.6.2 Funções Complexas . . . . . . . . . . . . . . . . . . . . . . . . 37 3.7 INTLIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.7.1 Simulação de Arredondamento Direcionado . . . . . . . . . . . . 40 3.8 COMMONS MATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.8.1 Organização . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.8.2 Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . 42 3.9 Linguagens XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.9.1 PASCAL-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.9.2 C-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.10 JAVA-XSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.10.1 A Linguagem de Programação JAVA . . . . . . . . . . . . . . . . 58 3.10.2 Desenvolvimento da Biblioteca . . . . . . . . . . . . . . . . . . 59 3.10.3 Pacote IAMath . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.10.4 Modo de Arredondamento . . . . . . . . . . . . . . . . . . . . . 61 3.11 Resumo Comparativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.12 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4 Módulos Complexo e Complexo Intervalar 65 4.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.2 Os Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.2.1 Módulo Complexo . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.2.2 Módulo Complexo Intervalar . . . . . . . . . . . . . . . . . . . . 69 4.3 Comparação entre C-XSC e JAVA-XSC . . . . . . . . . . . . . . . . . . 72 4.4 Considerações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5 Conclusão 75 Referências bibliográficas 77 A Modos de Arredondamento 81 A.1 Tipos de Arredondamento . . . . . . . . . . . . . . . . . . . . . . . . . 81 A.2 Arredondamento com o Incremento Pré-Determinado . . . . . . . . . . . 82 A.3 Arredondamento para Inteiro . . . . . . . . . . . . . . . . . . . . . . . . 82 A.4 Regras de Desempate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 A.5 Arredondamento Escalado . . . . . . . . . . . . . . . . . . . . . . . . . 85 A.6 Arredondamento em Ponto-Flutuante . . . . . . . . . . . . . . . . . . . . 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 Interpretação geométrica dos números complexos . . . . . . . . . . . . . 12 2.2 Forma algébrica e polar do complexo c = 5+ i3 . . . . . . . . . . . . . . 13 3.1 Hierarquia dos tipos numéricos em CLN . . . . . . . . . . . . . . . . . 28 3.2 Tamanho de uma variável do tipo dotprecision . . . . . . . . . . . . . . . 51 3.3 Formato de um ponto-flutuante . . . . . . . . . . . . . . . . . . . . . . . 54 3.4 Complexo Intervalar [3.0,4.5] + i[1.0,2.0] . . . . . . . . . . . . . . . . . 56 4.1 Interface gráfica da ferramenta GraphPad . . . . . . . . . . . . . . . . . 73 iv Lista de Tabelas 3.1 Módulos do INTLIB: Aritmética elementar para intervalos . . . . . . . . 38 3.2 Módulos do INTLIB: Funções padrões para intervalos . . . . . . . . . . . 38 3.3 Módulos do INTLIB: Funções úteis . . . . . . . . . . . . . . . . . . . . 39 3.4 Métodos da classe Complex . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.5 Métodos da classe ComplexFormat . . . . . . . . . . . . . . . . . . . . . 46 3.6 Modos de Arredondamento . . . . . . . . . . . . . . . . . . . . . . . . 63 3.7 Resumo comparativo entre as ferramentas . . . . . . . . . . . . . . . . . 63 4.1 Métodos da classe Complex . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2 Métodos da classe Cinterval . . . . . . . . . . . . . . . . . . . . . . . . 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 obje- tivo 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 pos- sí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(11a2b2−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 es- tendida (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 mate- má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 progra- maçã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 sur- gissem 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 ga- rantir a exatidão dos cálculos efetuados [Garrozi & Albuquerque 2009]. Algumas bibliotecas como a MPFI e INTLIB (Capítulo 3), apresentam módulos es- pecí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 ti- pos 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 re- ais à 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 desenvolvi- mento 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 ferramen- tas como MPFI (Multiple Precision Floating-Point Interval) e MPC (Multiple Precision Complex), que trabalham respectivamente com intervalos e números complexos, mas am- bas 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 in- tervalares, 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 in- tervalares. 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 nu- mé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 in- tervalar 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 arredon- damento. Capítulo 2 Números complexos 2.1 Introdução De acordo com [Cerri & Monteir 2001], na primeira metade do século XVII os mate- má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 coi- sas, 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 com- plexos, 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 i2 = -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. A partir dos números complexos os matemáticos tiveram a possibilidade de criar no- vas á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 prin- cí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 fra- cioná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 natu- rais. 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 defi- nida 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 re- ais, 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 racio- nais 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 pri- meiros 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 fa- zendo 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 dife- rença da divisão entre o segundo termo do segundo par informado pela soma dos quadrados destes termos. (c,d) (a,b) = (c,d) ( a a2+b2 ,− b a2+b2 ) = ( ca+db a2+b2 , da− cb 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) 4 - Divisão (1,2) (3,4) = (1,2) · ( 3 32+42 ,− 4 32+42 ) = (1,2) · ( 3 25 ,− 4 25 ) = ( 11 25 , 2 25 ) Dessa forma, o conjunto dos números complexos podem ser vistos como uma estru- tura 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. Ob- serve 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 nova- mente 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 resul- tado 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+ ibd2 = (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. c1 c2 = c+ id(a− ib) (a+ ib)(a− ib) = ca+db a2+b2 + da− cb a2+b2 i 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+ i212 = 10+ i8+ i15−12 =−2+ i23 4 - Divisão: (3+ i) (4+ i2) = (3+ i)(4− i2) (4+ i2)(4− i2) = 14− i2 12+ i16 2.2.2 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 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≤ θ≤ 2pi, formado pelo vetor com o eixo real, tal que, cosθ= a |c| e senθ= b |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 represen- taçã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 |c|=√22+22 =√4+4 =√8 = 2√2. cosθ= 2 2 √ 2 = 1√ 2 . Portanto θ= arcsin cosθ= arcsin 1√ 2 = 45. Logo a representação polar para c = 2+ i2 é o par (2 √ 2,45) = (2.828417, 45). 2. Transformação do número complexo polar (4.47, 26.57o) na forma algébrica: cosθ= a |c| = cos26,57 o = a 4,47 . Portanto a ∼= 4. sinθ= b |c| = sin26,57 o = b 4,47 Portanto b ∼= 2. 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≤ θ≤ pi2 , então 0≤ 2θ≤ pi. 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|z| = 1. CAPÍTULO 2. NÚMEROS COMPLEXOS 14 • Quando |z| < 1, então |w| = 1|z| > 1, ou seja, w leva o interior do círculo unitário em seu exterior. • Quando |z| > 1, então |w| = 1|z| < 1, ou seja, w leva o exterior do círculo unitário no seu interior. w = 1 z = z¯ |z|2 . Então w leva primeiro z no seu complexo conjugado z¯ e em seguida multiplica-o pelo inverso do quadrado do seu comprimento 1 |z|2 . Função exponencial Na função exponencial real f , sabe-se que f (x+ x′) = ex+x′ = exex′ , onde e é a base do logaritmo natural e vale aproximadamente 2,718281828459045. Ou seja, f (x+ x′) = f (x) f (x′) e f (0) = 1. Estendendo este conceito para números complexos, toma-se a fun- ção g(y) = cosy+ isiny. Logo g(y)g(y′) = g(y+y′) e g(0) = 1. Ou seja, ela tem a mesma propriedade que a exponencial real. Sendo assim pode-se definir eiy = cosy+ isiny, onde y ∈ R. Mantendo esta propriedade, para z = x+ iy, então ez = ex+iy = ex.eiy. Como eiy = cosy+ isiny então ez = ex(cosy+ isiny),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 z′ são dois números complexos, então temos as seguintes propriedades da ex- ponencial complexa: • Propriedade 1: e0 = 1; • Propriedade 2: ez+z′ = ezez′; • Propriedade 3: ez−z′ = ez ez′ ; • Propriedade 4: ez 6= 0; • Propriedade 5: ez+2pii = 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= eiz+ e−iz z e senz = eiz− e−iz 2i . Função logarítmica São definidas logz através das seguintes equivalências: logz = w se, somente se, ew = z. 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. Mas ew = z também pode ser visto como eueiv = reiθ, como eu = r então eiv = eiθ, donde v = θ+2kpi,k ∈ Z. Substituindo estes dados na equação original, obtêm-se logz = lnr+ i(θ+2kpi),k ∈ Z. Sendo r = |z| e θ+2kpi= argz, então logz = 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 < 2pi, resultando no logaritmo principal de z denotado por logz = ln|z|+ iargz. Caso z = reiθ então logz = lnr+ iθ. 2.3 Números complexos intervalares A matemática intervalar foi uma das soluções propostas para reduzir o custo dos er- ros 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 diferen- tes tipos de intervalos: retangulares, circulares e setoriais. Neste capítulo serão apresenta- dos 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 re- ais, 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 refe- rentes à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 con- junto 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 in- terseçã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{x1y1,x1y2,x2y1,x2y2},max{x1y1,x1y2,x2y1,x2y2} (Pseudo inverso multiplicativo) Seja X = [x1,x2] tal que 0 /∈ X . Então X−1 = [ 1x2 , 1 x1 ] = {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úme- ros 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 parale- los 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 com- plexos. 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 = (A1B1−A2B2)+ i(A1B2+A2B1); 4. A : B = A1B1+A2B2 (B1)2+(B2)2 + iA2B1−A1B2 (B1)2+(B2)2 , onde 0 /∈ (B1)2+(B2)2. 2.3.3 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 é re- presentado 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. 1B = b¯ |b|2−(r2)2 , r2 |b|2−(r2)2 para 0 /∈ B; 4. A.B = (ab; |a|r2+ |b|r1+ r1r2); 5. A : B = A. 1B para B /∈ 0. 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 (θ+−θ− ≤ 2pi, 0 ≤ θ− < 2pi e 0≤ θ+ < 4pi). 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} • {ρ1ρi(θ1+θ2)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 arit- mé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 2pi, pode-se ajustar adi- cionando ou subtraindo 2pi 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 1Lembre-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 (Z2) Seja Z = X +Yi ∈ I(C) Z2 = (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 (Zn) Para n = -1, 0, 1 e 2 as funções para Zn são implementadas como 1/Z,1,Z, e Z2, 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)},−pi< θ≤+pi. (2.2) Podemos definir sqrt(Z) como: sqrt(Z) = {sqrt(z)|z ∈ Z ∈ I(C)}. (2.3) Função logaritmo ln(Z) = ln(abs(Z))+ i.arg(Z). (2.4) Funções Trigonométricas De acordo com [da Silva 2007], a forma de onda das funções seno e cosseno são res- ponsá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) Função cosseno cos(Z) = cos(X).cosh(Y )− i.sen(X).senh(Y ). (2.6) Função tangente tan(Z) = sin(2X) cos(2X)+ cosh(2Y ) + i. sinh(2Y ) cos(2X)+ cosh(2Y ) . (2.7) Função co-tangente cot(Z) = tan (pi 2 −Z ) . (2.8) CAPÍTULO 2. NÚMEROS COMPLEXOS 23 Funções Trigonométricas Inversas Função arco cosseno arccos(Z) = tan (pi 2 −arcsen(Z) ) . (2.9) Função arco tangente arctan(Z) = tan ( 1 2i .Ln 1+ iZ 1− iZ ) . (2.10) Função arco co-tangente arccot(Z) = arctan ( 1 Z ) . (2.11) Funções Hiperbólicas Função seno hiperbólico senh(Z) = senh(X).cos(Y )+ i.cosh(X).sen(Y ) (2.12) 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 24 2.4 Considerações Este capítulo apresentou os números complexos com suas representações e aritméti- cas. 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 in- tervalos 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 lingua- gens 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 aper- feiç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úme- ros 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 1http://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 dife- rentes tipos. A classe cl_RA corresponde exatamente aos números reais: números racio- nais, 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 repre- sentaçã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 de- nominador 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 apro- ximaçõ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 si- nal 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 represen- tados 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 (un- derflow). 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: • 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. 3.3 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 develop- ment 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 é distri- buí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 pesqui- sas, 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. 2http://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 pre- ciso (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 é positivo. Zero tem uma representação única 0 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 decre- mentada 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 sig- nifica 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 anteri- ormente, 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. 3http://www.mpfr.org/ CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 32 3.4.1 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 754- 2008); • MPFR_RNDU : Arredondamento em direção ao infinito positivo (roundTowardPo- sitive no IEEE 754-2008); • MPFR_RNDD: Arredondamento em direção ao infinito negativo (roundToward- Negative 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 arma- zenado 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 erro no resultado é menor ou igual a 1 2 ulp (unit in the last place), que é o peso do úl- 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 significantes e é interpretada como 1 2 ≤ m < 1. 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 efici- ente, 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 com- putada não é limitada à precisão simples ou dupla da máquina dos números de ponto- flutuante, no contrário, precisões arbitrárias devem estar disponíveis. Além disso, esta 4http://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 arredon- damento: 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 arredonda- mento 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 tra- balhar tanto com o compilador C quando com C++. Esta biblioteca utiliza a representação cartesiana: o número complexo x+ iy é armaze- nada como um par (x,y) de dois números de ponto-flutuante de precisão arbitrária (pares 5http://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 per- tencem 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 arredonda- mento 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 in- teiras 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 ope- raçã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 For- tran. • 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 ambi- guidade 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 37 MULT Multiplicação IDIV Divisão RNDOUNT Arredondamento SCLADD Adição de intervalos e números re- ais 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 ne- gativo 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 inter- valo CAPÍTULO 3. ALGUMAS FERRAMENTAS PARA CÁLCULO NUMÉRICO 38 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 in- tervalo 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 3.7.1 Simulação de Arredondamento Direcionado O arredondamento direcionado simulado é uma forma com a qual fechamentos rigo- rosos 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 verda- deiro. 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éto- dos 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 for- necida. 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 Fou- rier). 11. org.apache.commons.math.geometry - geometria (espaços euclidianos e Parti- cionamento 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 com- plexo acos() Calcula o arco-cosseno de um número com- plexo 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 com- plexo 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 com- plexo 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 com- plexo 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 com- plexo 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 com- plexo sqrt() Calcula a raiz quadrada de um número com- plexo 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 par- tes 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 for- mato 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 ima- ginaryFormat): 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 par- tes 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 re- alFormat, java.text.NumberFormat imaginaryFormat): Cria uma instância com um carác- ter 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 for- mat(Object,StringBuffer,FieldPosition). format(Complex complexo, StringBuffer sb, FieldPosi- tion pos) Formata um objeto complexo para produzir uma string. format(Double c) Esse método chama for- mat(Object,StringBuffer,FieldPosition). format(Object obj, String- Buffer sb, FieldPosition pos) Formata um objeto para produzir uma string getAvailableLocales() Obtêm um conjunto de localidades para as quais for- matos complexos estão disponíveis. 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 determi- nada localidade. getInstance(String ima- ginaryCharacter, Locale locale) Retorna o formato padrão complexo para a determi- nada localidade. getRealFormat() Acessa o realFormat parse(String source) Analisa uma string para produzir um objeto com- plexo. parse(String source, ParsePo- sition pos) Analisa uma string para produzir um objeto com- plexo. 3.9 Linguagens XSC Há cinco décadas que estão sendo desenvolvidas pesquisas com o intuito de possibi- litar 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 lingua- gens 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 universi- dades 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, jun- tamente com a IBM, foi lançada uma versão do FORTRAN 77 implementada em compu- tadores 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 bas- tante 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, torna- ram 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, es- tações de trabalho, mainframes e supercomputadores. Os principais conceitos de Pascal-XSC são [Klatte et al. 1999]: • Padrão ISO do PASCAL; 6http://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 apre- sentados 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 for- mato 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 espe- cificaçã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 to- dos 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 expoen- tes 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 cin- terval. Eles não possuem constantes nem operadores como sua linguagem, portanto, tam- bé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 aces- sadas 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 bas- tante 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, in- tervalo 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 7http://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 arit- mé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 matematica- mente ú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 argumen- tos 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 uti- liza 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 divi- didos 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 to- dos 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 expo- ente 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 tam- bé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 deci- sivo 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 matemati- camente 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 va- riá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 permi- tidos 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 anterior- mente. 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 pre- cisã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últipla- precisã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++, C- XSC 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 so- brecarga 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 56 3.10 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 lingua- gens. 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 atra- tivos em JAVA é a sua independência de plataformas e a sua grande utilização em dispo- sitivos 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 soft- ware, executando programas como se fosse um computador real. Desta forma os progra- mas 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 progra- mas 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. 8http://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 de- senvolvida 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 conver- tem 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 necessi- dade 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 con- té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 + infi- nito. 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 intervala- res 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 inflaciona- mento nos extremos, que embora atenda o princípio da corretude, em alguns casos pro- voca 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 direcio- nado. 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 va- riáveis internas, sendo assim, assegura o mesmo comportamento em qualquer pla- taforma; • 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ão- sinalizada (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 flu- tuante 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 61 5 Distante do zero 6 Mais próximo de x 7 Arredondamento direcionado simu- lado Tabela 3.7: Resumo comparativo entre as ferramentas Linguagem Suporte à interva- los Suporta à comple- xos Modo de arredon- damento CLN Não Sim 1, 3, 4 e 6 GMP Não Não 1 a 5 MPFR Não Não 1 a 5 MPFI Sim Não 3 e 4 MPC Não Sim 1 a 4 INTLIB Sim Não 7 COMMONS MATH Não Sim 1 a 4 PASCAL-XSC Sim Sim 1 a 4 C-XSC Sim Sim 1 a 4 JAVA-XSC Sim Não 1 a 4 Apesar das bibliotecas que implementam números complexos (CLN, MPC, Pascal- XSC e C-XSC) possuírem uma quantidade considerável de funções complexas, as mes- mas 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, fa- zendo com que o módulo Complexo do JAVA-XSC se torne uma ferramenta mais com- pleta, 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ífi- cas. 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 exis- tem 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 ge- rados 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 diferen- tes plataformas possuem diferentes precisões. Além disso, aplicativos desenvolvidos em JAVA, geralmente, ocupam pouco espaço na memória, podendo ser utilizada por disposi- tivos 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 64 4.2 Os Módulos Neste trabalho foram desenvolvidos dois módulos adicionais; a saber: Complex (Com- plexo) 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 ar- redondamento para baixo addup Complex Calcula a soma de dois números Complexos com ar- redondamento 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 Com- plexo 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 a n 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 67 7 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) */ 9 } 11 } 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 par- tes 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 co- locando 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 desen- volvidos 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 interva- lares sub Cinterval Calcula a subtração de dois números Complexos in- tervalares mult Cinterval Calcula a multiplicação de dois números Complexos intervalares div Cinterval Calcula a divisão de dois números Complexos inter- valares equals Boolean Verifica se dois Complexos intervalares são iguais ou não conj Cinterval Calcula o conjugado de um número Complexo inter- valar diam Complex Calcula o diâmetro de um número Complexo interva- lar mod RealInterval Calcula o módulo de um número Complexo intervalar dist double Calcula a distância entre dois números Complexos in- tervalares arg RealInterval Calcula o argumento de um número Complexo inter- valar mid Complex Retorna um número Complexo a partir de um Com- plexo intervalar sqr Cinterval Calcula o quadrado de um número Complexo interva- lar exp Cinterval Calcula o exponencial de um número Complexo in- tervalar CAPÍTULO 4. MÓDULOS COMPLEXO E COMPLEXO INTERVALAR 69 power Cinterval Calcula a potência de um número Complexo interva- lar elevado a n ln Cinterval Calcula o logaritmo de um número Complexo inter- valar sqrt Cinterval Calcula a raiz quadrada de um número Complexo in- tervalar 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 Com- plexo intervalar tan Cinterval Calcula a tangente de um número Complexo interva- lar cot Cinterval Calcula a cotangente de um número Complexo inter- valar tanh Cinterval Calcula a tangente hiperbólica de um número Com- plexo intervalar coth Cinterval Calcula a cotangente hiperbólica de um número Com- plexo intervalar asin Cinterval Calcula o arco seno de um número Complexo inter- valar asinh Cinterval Calcula o arco seno hiperbólico de um número Com- plexo intervalar acos Cinterval Calcula o arco cosseno de um número Complexo in- tervalar 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 in- tervalar 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 70 acoth Cinterval Calcula arco cotangente hiperbólico de um número Complexo intervalar 4.3 Comparação entre C-XSC e JAVA-XSC Para realizar a comparação entre C-XSC e JAVA-XSC foi necessário executar um con- junto 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 resulta- dos 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 apre- sentados 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çoa- mento 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 desen- volvidos 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 computacio- nal 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 apli- cativos, 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 inter- valo 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 com- plexas 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 res- pectivas extensões para complexos. Referências Bibliográficas Alefeld, Gotz & Junger Herberger (1983), Introduction to Interval Computations, Acade- mic 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 func- tions in c-xsc’, Wissenschaftliches Rechnen/Softwaretechnologie . Blomquist, F., W. Hofschuster, W. Kramer & M. Neher (2005b), ‘Complex interval func- tions 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 lin- guagem 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 com- plexos. 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 15- Setembro-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 Zimmer- mann (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 Fede- ral 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 Zimmer- mann (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 Engi- neering . 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’, Ins- titute 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 algo- ritmos’, 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 bi- blioteca 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 me- nos 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 lo- garí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 pi para 227 ; • Aproximação de uma fração com expansão decimal periódica em uma fração deci- mal finita, por exemplo 35 para 1,6667; • substituição de um número racional por uma fração de menor numerador e deno- minador, 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 exem- plo, 27,2 segundo por 30 segundos (um múltiplo de 15). ANEXO A. MODOS DE ARREDONDAMENTO 79 A.2 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 incre- mento 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. Ar- redondando 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 é arredon- dado 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 é arredon- dado 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 é arredon- dado 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 é arredon- dado 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 é arredon- dado 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 é arredon- dado 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 es- cala 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 al- guns 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 arredon- damento 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 é nega- tivo), 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 in- teiro 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 5 */ public class RealInterval implements Cloneable { 7 public double lo, hi; public String Err; 9 public RealInterval(double lo, double hi) { 11 if (lo <= hi) { this.lo = lo; 13 this.hi = hi; this.Err = ""; 15 } else { System.out.println("Interval(Inferior=" + lo + ",Superior=" + hi 17 + "):" + "incorreto o extremo Inferior <= Superior"); } 19 } 21 public RealInterval(double x) { if ((Double.NEGATIVE_INFINITY < x) && (x < Double. POSITIVE_INFINITY)) { 23 this.lo = x; this.hi = x; 25 this.Err = ""; } else { 27 System.out.println("Intervalo(x): deve ser -inf Math.min((x.hi * y. lo), 59 (x.hi * y.hi))) { z.lo = Math.min((x.hi * y.lo), (x.hi * y.hi)); 61 } else { z.lo = Math.min((x.hi * y.lo), (x.hi * y.hi)); 63 } if (Math.max((x.lo * y.lo), (x.lo * y.hi)) > Math.max((x.hi * y. lo), 65 (x.hi * y.hi))) { z.hi = Math.max((x.lo * y.lo), (x.lo * y.hi)); 67 } else { z.hi = Math.max((x.hi * y.lo), (x.hi * y.hi)); ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 88 69 } return (z); 71 } 73 /** * 5) Método invmul 75 * Calcula o intervalo recíproco ou * Pseudo inverso multiplicativo intervalar 77 */ public static RealInterval invmul(RealInterval x) { 79 RealInterval z = new RealInterval(); if ((x.lo <= 0.0) && (x.hi >= 0.0)) { 81 z.Err = "invmul: Os valores assumidos do intervalo não devem conter zero"; } else { 83 z.lo = 1 / x.hi; z.hi = 1 / x.lo; 85 } return (z); 87 } 89 /** * 6) Método sclmul 91 * Calcula a multiplicação de um escalar * por um intervalo 93 */ public static RealInterval sclmul(double d, RealInterval x) { 95 RealInterval z = new RealInterval(); z.lo = Math.min(d * x.lo, d * x.hi); 97 z.hi = Math.max(d * x.lo, d * x.hi); return z; 99 } 101 /** * 7) Método mdiv 103 * Calcula a divisão de Intervalos */ 105 public static RealInterval div(RealInterval x, RealInterval y) { RealInterval z = new RealInterval(); 107 if ((y.lo <= 0.0) && (y.hi >= 0.0)) { z.Err = "div: A divisão não aceita um intervalo contendo zero" ; 109 } 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))) { 111 z.lo = Math.min((x.hi / y.hi), (x.hi / y.lo)); } else { 113 z.lo = Math.min((x.lo / y.hi), (x.lo / y.lo)); } 115 if (Math.max((x.lo / y.hi), (x.lo / y.lo)) > Math.max((x.hi / y. hi), (x.hi / y.lo))) { 117 z.hi = Math.max((x.lo / y.hi), (x.lo / y.lo)); } else { 119 z.hi = Math.max((x.hi / y.hi), (x.hi / y.lo)); } 121 return (z); } 123 /** 125 * MÓDULO 2 - Funções entre conjuntos . *\ 127 129 /** * 8)Método union 131 * Calcula a união de intervalos */ 133 public static RealInterval union(RealInterval x, RealInterval y) 135 throws IAException { RealInterval z = new RealInterval(); 137 if ((x.hi < y.lo) || (y.hi < x.lo)) { z.Err = "union: A intesseção é vazia!"; 139 } else if (x.lo <= y.lo) // se o extremo inferior x.lo for menor que o extremo inferior y .lo 141 { z.lo = x.lo; 143 z.hi = Math.max(x.hi, y.hi); } else { 145 z.lo = y.lo; z.hi = Math.max(x.hi, y.hi); 147 } return z; 149 } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 90 151 /** * 9) Método hull 153 * União Convexa , faz concatenação de * dois intervalos 155 */ public static RealInterval hull(RealInterval x, RealInterval y) { 157 RealInterval z = new RealInterval(); z.lo = Math.min(x.lo, y.lo); 159 z.hi = Math.max(x.hi, y.hi); return z; 161 } 163 /** * 10) Método intersect 165 * Calcula a interseção de intervalos */ 167 public static RealInterval intersect(RealInterval x, RealInterval y) 169 throws IAException { RealInterval z = new RealInterval(); 171 if (((x.lo <= y.hi) && (y.hi <= x.hi)) || ((y.lo <= x.hi) && (x.hi <= y.hi))) { 173 z.lo = Math.max(x.lo, y.lo); z.hi = Math.min(x.hi, y.hi); 175 } else z.Err = "intersect: Não há interseção!"; 177 return z; } 179 /* 181 * MÓDULO 3 - Funções geométricas . *\ 183 185 /** * 11) Método dist 187 * Calcula a distância entre intervalos */ 189 public static double dist(RealInterval x, RealInterval y) { return (Math.max(Math.abs(x.lo - y.lo), Math.abs(x.hi - y.hi))); 191 } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 91 193 /** * 12) Método diam 195 * Calcula o diâmetro de um intervalos */ 197 public static double diam(RealInterval x) { return (x.hi - x.lo); 199 } 201 /** * 13) Método midpoint 203 * Calcula o ponto médio de um intervalo */ 205 public static double lmidpoint(RealInterval x) { return (x.lo + x.hi) / 2.0; 207 } 209 /** * MÓDULO 4 - Funções elementares . 211 *\ 213 /** 215 * 14) Método abs * Calcula o valor absoluto de um intervalo 217 */ public static RealInterval abs(RealInterval x) throws IAException { 219 RealInterval z = new RealInterval(); if ((x.lo <= 0.0) && (x.hi >= 0.0)) 221 z = new RealInterval(0.0, Math.max(Math.abs(x.lo), Math.abs(x. hi))); else 223 z = new RealInterval(Math.min(Math.abs(x.lo), Math.abs(x.hi)), Math.max(Math.abs(x.lo), Math.abs(x.hi))); 225 return z; } 227 /** 229 * 15) Método sqr * Calcula o quadrado de um intervalo 231 */ public static RealInterval sqr(RealInterval x) { 233 RealInterval z = new RealInterval(); ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 92 if ((x.lo < 0) && (x.hi > 0)) { 235 z.lo = 0; z.hi = x.hi * x.hi; 237 } else { z.lo = Math.min(x.lo * x.lo, x.hi * x.hi); 239 z.hi = Math.max(x.lo * x.lo, x.hi * x.hi); } 241 return (z); } 243 /** 245 * 16) Método sqrt * Calcula a raiz quadrada de um intervalo 247 */ public static RealInterval sqrt(RealInterval x) { 249 RealInterval z = new RealInterval(); if (x.lo < 0.0) 251 z.Err = "sqrt: 0 intervalo não pode possuir raízes imaginárias"; z.lo = Math.sqrt(x.lo); 253 z.hi = Math.sqrt(x.hi); return (z); 255 } 257 /** * 17) Método exp 259 * Calcula o exponencial de um intervalo */ 261 public static RealInterval exp(RealInterval x) { RealInterval z = new RealInterval(); 263 double hi, lo = 0; z.lo = Math.pow(Math.E, x.lo); 265 z.hi = Math.pow(Math.E, x.hi); return z; 267 } 269 /** * 18) Método exp2 271 * Calcula o exponencial de um intervalo * elevado a 2 273 */ public static RealInterval exp2(RealInterval x) { 275 RealInterval z = new RealInterval(); ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 93 double hi, lo = 0; 277 z.lo = Math.pow(2, x.lo); z.hi = Math.pow(2, x.hi); 279 return z; } 281 /** 283 * 19) Método exp10 * Calcula o exponencial de um intervalo 285 * elevado a 10 */ 287 public static RealInterval exp10(RealInterval x) { RealInterval z = new RealInterval(); 289 String Erro; double hi, lo = 0; 291 z.lo = Math.pow(10, x.lo); z.hi = Math.pow(10, x.hi); 293 return z; } 295 /** 297 * 20) Método power * Calcula a potência de um intervalo 299 */ public static RealInterval power(RealInterval x, int k) { 301 RealInterval z = new RealInterval(); double n = (double) k; 303 if ((x.lo < 0) && (x.hi >= 0) && (n % 2 == 0)) { z.lo = 0; 305 z.hi = Math.max(Math.pow(Math.abs(x.lo), n), Math.pow(Math.abs(x.hi), n)); 307 } else if ((x.hi < 0) && (n % 2 == 0)) { z.lo = Math.min(Math.pow(Math.abs(x.lo), n), 309 Math.pow(Math.abs(x.hi), n)); z.hi = Math.max(Math.pow(Math.abs(x.lo), n), 311 Math.pow(Math.abs(x.hi), n)); } else { 313 z.lo = Math.pow(x.lo, n); z.hi = Math.pow(x.hi, n); 315 } return z; 317 } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 94 319 /** * 21) Método ln 321 * Calcula o logarítmo natural de um intervalo */ 323 public static RealInterval ln(RealInterval x) { RealInterval z = new RealInterval(); 325 if (x.lo <= 0.0) { 327 z.Err = "ln: 0 intervalo não pode ser menor ou igual a zero!"; } else { 329 z.lo = Math.log(x.lo); z.hi = Math.log(x.hi); 331 } return z; 333 } 335 /** * 22) Método log2 337 * Calcula o logaritmo na base 2 de um intervalo */ 339 public static RealInterval log2(RealInterval x) { RealInterval z = new RealInterval(); 341 RealInterval result = new RealInterval(); z.lo = 2.0; 343 z.hi = 2.0; 345 if (x.lo <= 0.0) { z.Err = "log2: O intervalo não pode ser maior ou igual a zero" ; 347 } else { result = div(ln(x), ln(z)); 349 } return result; 351 } 353 /** * 23) Método log10 355 * Calcula o logaritmo na base 10 de um intervalo */ 357 public static RealInterval log10(RealInterval x) { RealInterval z = new RealInterval(); 359 RealInterval result = new RealInterval(); z.lo = 10.0; ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 95 361 z.hi = 10.0; if (x.lo <= 0.0) { 363 z.Err = "log10: O intervalo não pode ser menor ou igual zero"; } else { 365 result = div(ln(x), ln(z)); } 367 result = div(ln(x), ln(z)); return result; 369 } 371 /** * MÓDULO 5 - Funções trigonométricas . 373 *\ 375 /** 377 * 24) Método sin * Calcula o seno de um intervalo 379 *\ public static RealInterval sin(RealInterval x) { 381 RealInterval z = new RealInterval(); double troc , mmimM , maxM , k; 383 // // Se x2-xl >= 2PI, a função já passou pelos seus extremos -1 e 1 385 // if ((x.hi - x.lo) > 2 * Math.PI) { 387 z.lo = -1; z.hi = 1; 389 } else // 391 // Se x2-xl estiver entre PI e 2PI // 393 if ((x.hi - x.lo) > Math.PI) { if (Math.sin(x.lo + ((x.hi - x.lo) / 2)) == 0.0) { 395 z.lo = -1; z.hi = 1; 397 } 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)); 399 z.hi = 1; } else { // -1 e maxM 401 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)); 403 } } else { 405 // // Se x2-xl for menor que PI 407 // k = ((int) ((2 * (x.lo)) / Math.PI)) + 1; 409 // se xl <= k(pi/2) <= x2 e if ((x.lo <= (k * (Math.PI / 2))) && ((k * (Math.PI / 2)) <= x .hi)) { 411 // para algum k, tal que k-1 seja múltiplo de 4 if ((k - 1) % 4 == 0.0) { // minM e 1 413 z.lo = Math.min(Math.sin(x.lo), Math.sin(x.hi)); z.hi = 1; 415 } else // para algum k, tal que k+1 seja múltiplo de 4 417 if ((k + 1) % 4 == 0.0) { // -1 e maxM z.lo = -1; 419 z.hi = Math.max(Math.sin(x.lo), Math.sin(x.hi)); } else { // minM e maxM 421 z.lo = Math.min(Math.sin(x.lo), Math.sin(x.hi)); z.hi = Math.max(Math.sin(x.lo), Math.sin(x.hi)); 423 } } else { // minM e maxM 425 z.lo = Math.min(Math.sin(x.lo), Math.sin(x.hi)); z.hi = Math.max(Math.sin(x.lo), Math.sin(x.hi)); 427 } } 429 return z; } 431 /** 433 * \ 25) Método cos * * Calcula o co-seno de um intervalo * 435 */ public static RealInterval cos(RealInterval x) { 437 RealInterval z = new RealInterval(); x.lo = x.lo + Math.PI / 2; 439 x.hi = x.hi + Math.PI / 2; z = sin(x); 441 return z; } 443 ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 97 /** 445 * \ 26) Método tan * Calcula a tangente de um intervalo 447 */ public static RealInterval tan(RealInterval x) { 449 RealInterval z = new RealInterval(); int k1; 451 if ((x.hi - x.lo) >= Math.PI) z.Err = "tan: Diverge , pois o intervalo não pertence ao domínimo da função"; 453 k1 = (int) Math.floor(x.lo / (Math.PI / 2)) + 1; if ((k1 % 2 != 0) && (k1 * Math.PI / 2 >= x.lo) 455 && (k1 * Math.PI / 2 <= x.hi)) z.Err = "tan: Diverge , pois o incervalo não pertence ao dominio da funcão!"; 457 else { z.lo = Math.tan(x.lo); 459 z.hi = Math.tan(x.hi); } 461 return z; } 463 /** 465 * 27) Método cot * Calcula a co-tangente de um intervalo 467 */ public static RealInterval cot(RealInterval x) { 469 RealInterval z = new RealInterval(); int k1; 471 if ((x.hi - x.lo) >= Math.PI) z.Err = "cot: Diverge , pois o intervalo não pertence ao domínio da função!"; 473 k1 = (int) Math.floor(x.lo / (Math.PI)) + 1; if ((k1 * Math.PI >= x.lo) && (k1 * Math.PI <= x.hi)) 475 z.Err = "cot: Diverge , pois o intervalo não pertence ao domínio da função!"; else { 477 z.hi = (1 / Math.tan(x.lo)); z.lo = (1 / Math.tan(x.hi)); 479 } return z; 481 } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 98 483 /** * 28) Método sec 485 * Calcula a secante de um intervalo */ 487 public static RealInterval sec(RealInterval x) { RealInterval z = new RealInterval(); 489 int k1, k; if ((x.hi - x.lo) >= Math.PI) 491 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; 493 k = (int) Math.floor(x.lo / Math.PI) + 1; if ((k1 % 2 != 0) && (k1 * Math.PI / 2 >= x.lo) 495 && (k1 * Math.PI / 2 <= x.hi)) z.Err = " sec: Diverge , pois o intervalo não pertence ao domínio da função!"; 497 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)); 499 z.hi = -1; } else if ((k % 2 == 0) && (k * Math.PI >= x.lo) 501 && (k * Math.PI <= x.hi) && (x.lo != 0)) { z.hi = Math.max(1 / Math.cos(x.lo), 1 / Math.cos(x.hi)); 503 z.lo = 1; } else { 505 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)); 507 } return (z); 509 } 511 /** * 29) Método csc 513 * Calcula a co-secante de um intervalo */ 515 public static RealInterval csc(RealInterval x) { RealInterval z = new RealInterval(); 517 x.lo = x.lo - Math.PI / 2; x.hi = x.hi - Math.PI / 2; 519 z = sec(x); return (z); 521 } ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 99 523 /** * 30) Método arcsin 525 * Calcula o arco seno de um intervalo */ 527 public static RealInterval arcsin(RealInterval x) { RealInterval z = new RealInterval(); 529 if ((x.lo < -1) || (x.hi > 1)) { 531 z.Err = "arcsen: Neste intervalo a função não tem inversa!"; } 533 z.lo = Math.asin(x.lo); z.hi = Math.asin(x.hi); 535 return z; } 537 /** 539 * 31) Método arccos * Calcula o arco co seno de um intervalo 541 */ public static RealInterval arccos(RealInterval x) { 543 RealInterval z = new RealInterval(); 545 if ((x.lo < -1.0) || (x.hi > 1)) { z.Err = "arccos: Neste intervalo a função não tem inversa!"; 547 } else { z.lo = Math.acos(x.hi); 549 z.hi = Math.acos(x.lo); } 551 return z; } 553 /** 555 * 32) Método arcatn * Calcula o arco tangente de um intervalo 557 */ public static RealInterval arctan(RealInterval x) { 559 RealInterval z = new RealInterval(); z.lo = Math.atan(x.lo); 561 z.hi = Math.atan(x.hi); return z; 563 } 565 /** ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 100 * 33) Método sinh 567 * Calcula o seno hiperbólico de um intervalo */ 569 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; 573 z.hi = (Math.pow(Math.E, x.hi) - Math.pow(Math.E, -x.hi)) / 2; return z; 575 } 577 /** * 34) Método cosh 579 * Calcula o coseno hiperbólico de um intervalo */ 581 public static RealInterval cosh(RealInterval x) { RealInterval z = new RealInterval(); 583 double a, b; a = (Math.pow(Math.E, x.lo) + Math.pow(Math.E, -x.lo)) / 2; 585 b = (Math.pow(Math.E, x.hi) + Math.pow(Math.E, -x.hi)) / 2; if ((x.lo <= 0) && (x.hi >= 0)) { 587 z.lo = 1; if (Math.abs(x.lo) >= x.hi) 589 z.hi = a; else 591 z.hi = b; } else { 593 z.lo = Math.min(a, b); z.hi = Math.max(a, b); 595 } return z; 597 } 599 /** * 35) Método tanh 601 * Calcula a tangente hiperbólico * de um intervalo */ 603 public static RealInterval tanh(RealInterval x) { RealInterval z = new RealInterval(); 605 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)); 607 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 101 609 return z; } 611 /** 613 * 36) Método coth * Calcula o co-tangente hiperbólico de um intervalo 615 */ public static RealInterval coth(RealInterval x) { 617 RealInterval z = new RealInterval(); if ((x.lo <= 0.0) && (x.hi >= 0.0)) 619 z.Err = "coth: O intervalo não pode conter o valor zero!"; else { 621 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)); 623 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)); 625 } return z; 627 } 629 /** * 37) Método sech 631 * Calcula a secante hiperbólica de um intervalo */ 633 public static RealInterval sech(RealInterval x) { RealInterval z = new RealInterval(); 635 double a, b; a = 2.0 / (Math.pow(Math.E, x.lo) + Math.pow(Math.E, -x.lo)); 637 b = 2.0 / (Math.pow(Math.E, x.hi) + Math.pow(Math.E, -x.hi)); if ((x.lo < 0) && (x.hi > 0)) { 639 z.hi = 1; z.lo = Math.min(a, b); 641 } else { z.lo = Math.min(a, b); 643 z.hi = Math.max(a, b); } 645 return z; } 647 /** 649 * 38) Método csch * Calcula a co-secante hiperbólica de um intervalo 651 */ ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 102 public static RealInterval csch(RealInterval x) { 653 RealInterval z = new RealInterval(); double a, b; 655 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)); 657 if ((x.lo < 0) && (x.hi > 0)) z.Err = "csch: O intervalo não deve conter zero"; 659 else { z.lo = Math.min(a, b); 661 z.hi = Math.max(a, b); } 663 return z; } 665 /** 667 * 39) Método senhI * Calcula o seno hiperbólico inverso de um intervalo 669 */ public static RealInterval senhI(RealInterval x) { 671 RealInterval z = new RealInterval(); z.lo = Math.log(x.lo + Math.sqrt(Math.pow(x.lo, 2) + 1)); 673 z.hi = Math.log(x.hi + Math.sqrt(Math.pow(x.hi, 2) + 1)); return (z); 675 } 677 /** * 40) Método coshI 679 * Calcula o cosseno hiperbólico Inverso de um intervalo */ 681 public static RealInterval coshI(RealInterval x) { RealInterval z = new RealInterval(); 683 if (x.lo < 1) z.Err = "coshI: O intervalo [a,b] deve satisfazer a condição a ,b>= 1"; 685 else { z.lo = Math.log(x.lo + Math.sqrt(Math.pow(x.lo, 2) - 1)); 687 z.hi = Math.log(x.hi + Math.sqrt(Math.pow(x.hi, 2) - 1)); } 689 return (z); } 691 /** 693 * 41) Método tanhI ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 103 * Calcula a tangente hiperbólica Inverso de um intervalo 695 */ public static RealInterval tanhI(RealInterval x) { 697 RealInterval z = new RealInterval(); if (Math.abs(x.lo) >= 1) 699 z.Err = "tanhI: O intervalo deve estar entre -1 e 1!"; else { 701 z.lo = 0.5 * Math.log((1 + x.lo) / (1 - x.lo)); z.hi = 0.5 * Math.log((1 + x.hi) / (1 - x.hi)); 703 } return (z); 705 } 707 /** * 42) Método cothI 709 * Calcula o co-tangente hiperbólico Inverso * de um intervalo 711 */ public static RealInterval cothI(RealInterval x) { 713 RealInterval z = new RealInterval(); if ((x.lo >= -1) && (x.hi <= 1)) 715 z.Err = "cothI: O intervalo não pode estar entre -1 e 1"; else { 717 z.lo = 0.5 * Math.log((x.hi + 1) / (x.hi - 1)); z.hi = 0.5 * Math.log((x.lo + 1) / (x.lo - 1)); 719 } return (z); 721 } 723 /** * 43) Método sechI 725 * Calcula o secante hiperbólico Inverso * de um intervalo 727 */ public static RealInterval sechI(RealInterval x) { 729 RealInterval z = new RealInterval(); double troc; 731 if ((x.lo <= 0) && (x.hi > 1)) z.Err = "sechI = O intervalo tem que estar entre 0 e 1"; 733 else { z.hi = Math.log((1 + Math.sqrt(1 - Math.pow(x.lo, 2))) / (x.lo )); 735 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 )); } 737 return (z); } 739 /** 741 * 44) Método cschI * Calcula o co-secante hiperbólico Inverso 743 * de um intervalo */ 745 public static RealInterval cschI(RealInterval x) { RealInterval z = new RealInterval(); 747 double troc; if (((x.lo < 0) && (x.hi > 0)) || ((x.lo == 0) || (x.hi == 0))) 749 z.Err = "cschI: O intervalo não deve conter zero"; else { 751 z.hi = Math.log(1 / x.lo + (Math.sqrt(1 + Math.pow(x.lo, 2)) / Math.abs(x.lo))); 753 z.lo = Math.log(1 / x.hi * (Math.sqrt(1 + Math.pow(x.hi, 2)) / Math.abs(x.hi))); 755 } return (z); 757 } 759 /** * MÓDULO 6 - Funções de transferência e . Constantes Intervalares . 761 *\ 763 /** 765 * 45) Método int_interv * Converte um inteiro em um intervalo 767 *\ public static RealInterval int_interv(int i) { 769 RealInterval z = new RealInterval(); double x; 771 x = (double) i; z = new RealInterval(x, x); 773 return z; } 775 /** ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 105 777 * 46) Método real_interv * Converte um real em um intervalo 779 */ public static RealInterval real_interv(double i) { 781 RealInterval z = new RealInterval(); z = new RealInterval(i, i); 783 return z; } 785 /** 787 * 47) Método inf * retorna o extremo inferior de um intervalo 789 */ public static double inf(RealInterval x) { 791 double y; y = x.lo; 793 return y; } 795 /** 797 * 48) Método sup * retorna o extremo superior de um intervalo 799 */ public static double sup(RealInterval x) { 801 double y; y = x.hi; 803 return y; } 805 /** 807 * 49) Método PI * Calcula o intervalo de PI 809 */ public static RealInterval PI() { 811 RealInterval z = new RealInterval(); z.lo = Math.PI; 813 z.hi = nextfp(Math.PI); return (z); 815 } 817 /** * 50) Método PI/n 819 * Calcula o intervalo de PI * divido por n ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 106 */ 821 public static RealInterval PI_n(int i) { RealInterval z = new RealInterval(); 823 z.lo = PI().lo / i; z.hi = PI().hi / i; 825 return z; } 827 /** 829 * 51) Método A * Calcula o intervalo de 1/PI 831 */ public static RealInterval A() { 833 RealInterval z = new RealInterval(); z.lo = (1.0 / PI().hi); 835 z.hi = (1.0 / PI().lo); return (z); 837 } 839 /** * 52) Método blow - retorna um novo intervalo 841 * com o predecessordo extremo inferior e * sucessor do extremo superior de um intervalo 843 */ public static RealInterval blow(RealInterval x) { 845 RealInterval z = new RealInterval(); z.lo = prevfp(x.lo); 847 x.hi = nextfp(x.hi); return z; 849 } 851 public static double nextfp(double x) { double y; 853 if (1 < Double.POSITIVE_INFINITY) { long xx = Double.doubleToLongBits(x); 855 if (x >= 0) y = Double.longBitsToDouble(xx + 1); 857 else if (x == 0) y = Double.longBitsToDouble(1); 859 else y = Double.longBitsToDouble(xx - 1); 861 return (y); } else ANEXO B. CÓDIGO FONTE DA BIBLIOTECA JAVA-XSC 107 863 return (x); } 865 public static double prevfp(double x) { 867 if (x == 0) return (-nextfp(0.0)); 869 else return (-nextfp(-x)); 871 } 873 } Anexo C Código Fonte da Classe Complex 1 package ia_math; import jfloat.JFloat32; 3 5 public class Complex { 7 public float a, b; public char forma; 9 public double modulo , angulo; public String Err; 11 public Complex(float a, float b, char forma) { 13 this.forma=forma; if (forma==’a’){ 15 this.a = a; this.b = b; 17 } else if (forma==’p’){ 19 this.modulo=a; this.angulo=b; 21 } else System.out.println("Digite a para complexo algébrico e p para complexo polar!"); 23 } 25 27 public Complex(float x, char forma) { this.forma=forma; 29 if (forma==’a’){ this.a = x; ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 109 31 this.b = 0; } 33 else if (forma==’p’){ this.modulo=0; 35 this.angulo=0; } 37 } public Complex(char forma) { 39 this.forma=forma; if (forma==’a’){ 41 this.a = 0; this.b = 0; 43 } else if (forma==’p’){ 45 this.modulo=0; this.angulo=0; 47 } else System.out.println("Digite a para complexo algébrico e p para complexo polar!"); 49 } 51 public void setForma(char forma){ 53 this.forma=forma; 55 } 57 public float Re() { return this.a; 59 } 61 public float Im() { 63 return this.b; } 65 public String toString() { 67 String temp = new String(); if(this.forma==’a’){ 69 if(this.b>0) temp = this.a + " + i" + this.b; 71 else if(this.b<0) temp = this.a + " - i" + this.b*(-1); ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 110 73 else temp = this.a+""; 75 if (this.modulo >0){ temp = this.modulo+"(cos "+this.angulo+" + i.sen "+this. angulo+")"; 77 } } 79 else{ 81 temp = this.modulo+"(cos "+this.angulo+" + i.sen "+this.angulo +")"; 83 } return temp; 85 } 87 private String doubleToString(double x) { StringBuffer s = new StringBuffer((new Double(x)).toString()); 89 int i = s.length(); int j; 91 for (j = 1; j < 20 - i; i++) s.append(’ ’); 93 return (s.toString()); } 95 public Object cane() { 97 return new Complex(this.a, this.b, this.forma); } 99 /* ****************************************************************\ 101 * 1) Método add * * Calcula a soma de Complexos * 103 * \***************************************************************** */ 105 public static Complex add (Complex x, Complex y){ 107 Complex z = new Complex(’a’); ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 111 z.a=x.a+y.a; 109 z.b=x.b+y.b; return z; 111 } 113 /* ****************************************************************\ * 2) Método adddown * 115 * Calcula a soma de Complexos com arredondamento para baixo * * \***************************************************************** 117 */ 119 public static Complex adddown (Complex x, Complex y){ Complex z = new Complex(’a’); 121 JFloat32.setRoundingMode(JFloat32.ROUND_DOWN); z.a= JFloat32.add(x.a, y.a); 123 z.b= JFloat32.add(x.b, y.b); return z; 125 } 127 /* ****************************************************************\ * 3) Método addup * 129 * Calcula a soma de Complexos com arredondamento para cima * * \***************************************************************** 131 */ 133 public static Complex addup (Complex x, Complex y){ Complex z = new Complex(’a’); 135 JFloat32.setRoundingMode(JFloat32.ROUND_UP); z.a= JFloat32.add(x.a, y.a); 137 z.b= JFloat32.add(x.b, y.b); return z; ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 112 139 } 141 /* ****************************************************************\ * 3) Método sub * 143 * Calcula a subtração de Complexos * * \***************************************************************** 145 */ 147 public static Complex sub (Complex x, Complex y){ Complex z = new Complex(’a’); 149 z.a=x.a-y.a; z.b=x.b-y.b; 151 return z; } 153 /* ****************************************************************\ 155 * 4) Método subdown * * Calcula a subtração de Complexos com arredondamento para baixo * 157 * \***************************************************************** */ 159 public static Complex subdown (Complex x, Complex y){ 161 Complex z = new Complex(’a’); JFloat32.setRoundingMode(JFloat32.ROUND_DOWN); 163 z.a= JFloat32.sub(x.a, y.a); z.b= JFloat32.sub(x.b, y.b); 165 return z; } 167 /* ****************************************************************\ ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 113 169 * 5) Método subup * * Calcula a subtração de Complexos com arredondamento para baixo * 171 * \***************************************************************** */ 173 public static Complex subup (Complex x, Complex y){ 175 Complex z = new Complex(’a’); JFloat32.setRoundingMode(JFloat32.ROUND_UP); 177 z.a= JFloat32.sub(x.a, y.a); z.b= JFloat32.sub(x.b, y.b); 179 return z; } 181 /* ****************************************************************\ 183 * 6) Método mult * * Calcula a multiplicação de Complexos * 185 * \***************************************************************** */ 187 public static Complex mult (Complex x, Complex y){ 189 Complex z = new Complex(’a’); z.a=(x.a*y.a)-(x.b*y.b); 191 z.b=(x.a*y.b)+(x.b*y.a); return z; 193 } 195 /* ****************************************************************\ * 7) Método multdown * 197 * Calcula a multiplicação de Complexos com arredondamento ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 114 para baixo * * \***************************************************************** 199 */ 201 public static Complex multdown (Complex x, Complex y){ Complex z = new Complex(’a’); 203 JFloat32.setRoundingMode(JFloat32.ROUND_DOWN); z.a= JFloat32.mul(x.a, y.a)-JFloat32.mul(x.b, y.b); 205 z.b=JFloat32.mul(x.a, y.b)+JFloat32.mul(x.b, y.a); return z; 207 } 209 /* ****************************************************************\ * 8) Método multup * 211 * Calcula a multiplicação de Complexos com arredondamento para cima * * \***************************************************************** 213 */ 215 public static Complex multup (Complex x, Complex y){ Complex z = new Complex(’a’); 217 JFloat32.setRoundingMode(JFloat32.ROUND_UP); z.a= JFloat32.mul(x.a, y.a)-JFloat32.mul(x.b, y.b); 219 z.b=JFloat32.mul(x.a, y.b)+JFloat32.mul(x.b, y.a); return z; 221 } 223 /* ****************************************************************\ * 9) Método multEscalar * 225 * Calcula a multiplicação de um Complexo por um escalar * * \***************************************************************** ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 115 227 */ 229 public static Complex multEscalar (Complex x, float e){ Complex z = new Complex(’a’); 231 z.a= x.a * e; z.b= x.b * e; 233 return z; } 235 /* ****************************************************************\ 237 * 10) Método conj * * Calcula o conjugado de um Complexo * 239 * \***************************************************************** */ 241 public static Complex conj (Complex x){ 243 Complex z = new Complex(’a’); z.a= x.a; 245 z.b= x.b * (-1); return z; 247 } 249 /* ****************************************************************\ * 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 257 Complex divisor = new Complex(’a’); dividendo.a= (x.a*y.a)+(x.b*(y.b)); 259 dividendo.b=(x.a*(-y.b))+(x.b*y.a); divisor.a= (y.a*y.a) + (y.b*y.b); 261 return dividendo + " / " + divisor; } 263 /* ****************************************************************\ 265 * 12) Método divdown * * Calcula o divisão entre Complexos com arredondamento para baixo * 267 * \***************************************************************** */ 269 public static String divdown (Complex x, Complex y){ 271 Complex dividendo = new Complex(’a’); Complex divisor = new Complex(’a’); 273 JFloat32.setRoundingMode(JFloat32.ROUND_DOWN); dividendo.a= JFloat32.mul(x.a, y.a)+JFloat32.mul(x.b, y.b); 275 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); 277 return dividendo + " / " + divisor; } 279 /* ****************************************************************\ 281 * 13) Método divup * * Calcula o divisão entre Complexos com arredondamento para cima * 283 * \***************************************************************** */ 285 public static String divup (Complex x, Complex y){ 287 Complex dividendo = new Complex(’a’); ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 117 Complex divisor = new Complex(’a’); 289 JFloat32.setRoundingMode(JFloat32.ROUND_UP); dividendo.a= JFloat32.mul(x.a, y.a)+JFloat32.mul(x.b, y.b); 291 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); 293 return dividendo + " / " + divisor; } 295 /* ****************************************************************\ 297 * 14) Método norma * * Calcula a norma de um Complexos * 299 * \***************************************************************** */ 301 public static double norma(Complex x){ double z = x.a*x.a + x.b*x.b; 303 return z; } 305 /* ****************************************************************\ 307 * 14) Método modulo * * Calcula o módulo de um Complexos * 309 * \***************************************************************** */ 311 public static double modulo(Complex x){ return Math.sqrt(norma(x)); 313 } 315 /* ****************************************************************\ * 15) Método SetRe ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 118 * 317 * Modifica o valor da parte real de um complexo * * \***************************************************************** 319 */ public static Complex SetRe(Complex x, float z) { 321 x.a=z; return x; 323 } 325 /* ****************************************************************\ * 16) Método SetIm * 327 * Modifica o valor da parte imaginária de um complexo * * \***************************************************************** 329 */ public static Complex SetIm(Complex x, float z) { 331 x.b=z; return x; 333 } 335 /* ****************************************************************\ * 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 119 345 /* ****************************************************************\ * 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 */ public static Complex conv(Complex c) { 361 Complex z; 363 if (c.forma==’a’){ z= new Complex(’p’); 365 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 379 else z.angulo =(180/aux)+360; 381 } else{ 383 z= new Complex(’a’); double seno=0; 385 double cosseno=0; double a = Math.toRadians(c.angulo); 387 389 seno= (int) Math.sin(a); cosseno = (int) Math.cos(a); 391 393 z.a= Float.parseFloat(cosseno*c.modulo+""); 395 z.b=Float.parseFloat(seno*c.modulo+""); } 397 return z; 399 } 401 403 /* ****************************************************************\ * 21) Método pot * 405 * Potenciação * * \***************************************************************** 407 */ public static Complex pot(Complex c, int n) { 409 411 return Cinterval.mid(Cinterval.power(new Cinterval(c),n)); } 413 /* ANEXO C. CÓDIGO FONTE DA CLASSE COMPLEX 121 ****************************************************************\ 415 * 21) Método sqrt * * Raiz Quadrada * 417 * \***************************************************************** */ 419 public static Complex sqrt(Complex c) { return Cinterval.mid(Cinterval.sqrt(new Cinterval(c))); 421 } 423 /* ****************************************************************\ * 21) Método log * 425 * Logaritmo * * \***************************************************************** 427 */ public static Complex log(Complex c) { 429 return Cinterval.mid(Cinterval.ln(new Cinterval(c))); } 431 433 } Anexo D Código Fonte da Classe Cinterval 1 package ia_math; 3 /** 5 * A classe Cinterval representa um interva r2 fechado de números complexos */ 7 public class Cinterval implements Cloneable { public RealInterval r1, r2; 9 public String Err; double resxl , resxu ; 11 static final RealInterval um = new RealInterval(1); static final RealInterval HALFPI= new RealInterval(Math.PI/2); 13 static final double Inf_Pi = 7074237752028440.0 / 2251799813685248.0; static final double Inf_rev_sqrt_2 = 6369051672525772.0 / 9007199254740992.0; 15 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) { 21 this. r1 = r1; this. r2 = r2; 23 } 25 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 123 27 public Cinterval() { this. r1= new RealInterval(0); 29 this. r2= new RealInterval(0); } 31 public Cinterval(Complex c) { 33 35 this. r1= new RealInterval(c.a); this. r2= new RealInterval(c.b); 37 39 } 41 public Cinterval(RealInterval x) { 43 this. r1 = x; this. r2 = x; 45 47 } 49 51 public RealInterval r1() { 53 return this. r2; } 55 public RealInterval r2() { 57 return this. r2; } 59 public String toString() { 61 String temp = new String(); temp = this. r1 + " + i" + this. r2 ; 63 return temp; } 65 67 public Object clone() { return new Cinterval(this. r1, this. r2); 69 } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 124 71 /* ****************************************************************\ 73 * 1) Método add * * Calcula a soma de Intervalos COmplexos * 75 * \***************************************************************** */ 77 public static Cinterval add(Cinterval x, Cinterval y) { 79 Cinterval z = new Cinterval(); z. r1 = IAMath.add(x. r1,y. r1); 81 z. r2 = IAMath.add(x. r2,y. r2);; return (z); 83 } 85 /* ****************************************************************\ * 2) Método sub * 87 * Calcula a subração de Intervalos Complexos * * \***************************************************************** 89 */ 91 public static Cinterval sub(Cinterval x, Cinterval y) { Cinterval z = new Cinterval(); 93 z. r1 = IAMath.sub(x. r1,y. r1); z. r2 = IAMath.sub(x. r2,y. r2);; 95 return (z); } 97 /* ****************************************************************\ ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 125 99 * 3) Método mult * * Calcula a multiplicação de Intervalos Complexos * 101 * \***************************************************************** */ 103 public static Cinterval mult(Cinterval x, Cinterval y) { 105 Cinterval z = new Cinterval(); z. r1 = IAMath.sub(IAMath.mul(x. r1,y. r1),IAMath.mul(x. r2,y. r2)); 107 z. r2 = IAMath.add(IAMath.mul(x. r1,y. r2),IAMath.mul(x. r2,y. r1)); return (z); 109 } 111 /* ****************************************************************\ * 4) Método div * 113 * Calcula a divisao de Intervalos Complexos * * \***************************************************************** 115 */ 117 public static Cinterval div(Cinterval x, Cinterval y) { Cinterval z = new Cinterval(); 119 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); 121 z. r2 = IAMath.div(IAMath.sub(IAMath.mul(x. r2,y. r1),IAMath.mul (x. r1,y. r2)),divisor); 123 return z; } 125 /* ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 126 ****************************************************************\ 127 * 5) Método sqr * * Calcula o quadrado de Intervalos Complexos * 129 * \***************************************************************** */ 131 public static Cinterval sqr(Cinterval z) { 133 RealInterval rez= z.r1; RealInterval reza= IAMath.abs(z.r1); 135 RealInterval imz= z.r2; RealInterval imza= IAMath.abs(z.r2); 137 double irez= reza.lo; double srez = reza.hi; 139 double iimz= imza.lo; double simz=imza.hi; 141 RealInterval hxl= new RealInterval(irez); RealInterval hxu= new RealInterval(srez); 143 RealInterval hyl= new RealInterval(iimz); RealInterval hyu= new RealInterval(simz); 145 double resxl , resxu; resxl = IAMath.mul(IAMath.sub(hxl,hyu),IAMath.add(hxl,hyu)).lo; 147 resxu = IAMath.mul(IAMath.sub(hxu,hyl),IAMath.add(hxu,hyl)).hi; 149 hxl= IAMath.mul(rez,imz); hxl= IAMath.times2pown(hxl, 1); 151 return new Cinterval(new RealInterval(resxl ,resxu),hxl); 153 } 155 /* ****************************************************************\ * 6) Método equals * 157 * Informa se dois complexos intervalares são iguais ou não * * \***************************************************************** ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 127 159 */ 161 public static boolean equals(Cinterval x,Cinterval y) { boolean r=false; 163 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)) 165 r=true; return r; 167 } 169 /* ****************************************************************\ * 7) Método conj * 171 * Calcula o conjugado de um complexo intervalar * * \***************************************************************** 173 */ 175 public static Cinterval conj(Cinterval x) { 177 Cinterval z = new Cinterval(); z=x; 179 z.r2=IAMath.mulEsc(x.r2, -1.0); return z; 181 } 183 /* ****************************************************************\ * 8) Método diam * 185 * Calcula o diametro de um complexo intervalar * * \***************************************************************** 187 */ ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 128 189 public static Complex diam(Cinterval x) { Complex z = new Complex(’a’); 191 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 public static RealInterval mod(Cinterval x) { RealInterval a= IAMath.sqr(x.r1); 205 RealInterval b= IAMath.sqr(x.r2); return IAMath.sqrt(IAMath.add(a,b)); } 207 209 /* ****************************************************************\ * 10) Método dist * 211 * Calcula a distancia entre dois complexos intervalares * * \***************************************************************** 213 */ 215 public static double dist(Cinterval x, Cinterval y) { double a= IAMath.dist(x.r1, x.r2); 217 double b= IAMath.dist(y.r1, y.r2); double c=a-b; 219 return Math.abs(c); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 129 221 } 223 /* ****************************************************************\ * 11) Método exp * 225 * Calcula o exponencial de um número complexo intervalar * * \***************************************************************** 227 */ public static Cinterval exp(Cinterval x) 229 { 231 RealInterval a= IAMath.exp(x.r1); System.out.println(a); 233 RealInterval b= x.r2; return new Cinterval(IAMath.mul(a,IAMath.cos(b)),IAMath.mul(a, IAMath.sin(b))); 235 } 237 public static Cinterval power( Cinterval z, int n ) 239 { if( n == 0 ) 241 return new Cinterval( new RealInterval(1), new RealInterval(1) ); else if( n == 1 ) 243 return z; else if( n == -1 ) 245 return div(new Cinterval(new RealInterval(1),new RealInterval (1)),z); else if( n == 2 ) 247 return sqr(z); else 249 { 251 RealInterval abs_z = mod( z ); 253 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 130 if( n < 0 && abs_z.lo == 0.0 ) 255 // z contains 0 System.out.println ("z contém 0."); 257 if( abs_z.hi == 0.0 ) return new Cinterval( new RealInterval(0), new RealInterval (0) ); 259 else { 261 RealInterval arg_z = arg( z ); 263 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); 265 abs_z_n.hi= Math.nextUp(abs_z_n.hi); 267 269 271 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) ) )); 273 } } 275 } 277 279 static double parteInteira (double valor) { if (valor >= 0.0) { 281 return Math.floor (valor); } else { 283 return Math.ceil (valor); } 285 } 287 static double parteFracionaria (double valor) { if (valor >= 0.0) { 289 return valor - Math.floor (valor); } else { 291 return valor - Math.ceil (valor); } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 131 293 } 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 ) 313 System.out.println("Não permitido"); 315 return new Cinterval( ln_sqrtx2y2(z.r1,z.r2),arg(z) ); } 317 /* ****************************************************************\ 319 * 12) Método ln * * Calcula o logaritmo de um número complexo intervalar * 321 * \***************************************************************** */ 323 public static Cinterval ln(Cinterval z) ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 132 { 325 RealInterval a1= IAMath.abs(z.r1) ; 327 RealInterval a2= IAMath.abs(z.r2); if (a1.lo == 0.0 && a2.lo == 0.0 ) { 329 // z contains 0 System.out.println("z contém zero"); 331 return z; } 333 else // return Cinterval( ln( abs_z_2 ) / 2.0 , arg( z ) ); 335 return new Cinterval( ln_sqrtx2y2(z.r1,z.r2), arg(z) ); 337 } 339 public static RealInterval Sqrt_zpx( RealInterval x, RealInterval y ) 341 { int c1 = 1021; 343 double Infx=x.lo; double Infy=y.lo; 345 int ex_x= (int) Math.exp(Infx); int ex_y= (int) Math.exp(Infy); 347 RealInterval xc = IAMath.abs(x); RealInterval yc = (y); 349 RealInterval res; boolean yeq0=(Infy==0); 351 if ((ex_x >=c1) || (ex_y >=c1)) 353 { // To avoid overflow , scaling is necessary: IAMath.power(xc,-2); 355 if (yeq0) { IAMath.power(xc ,1); 357 res = IAMath.sqrt(xc); } else { 359 IAMath.power(yc,-2); res = IAMath.sqrt( IAMath.add(IAMath.sqrtx2y2(xc,yc),xc)); 361 } IAMath.power(res ,1); // Backscaling 363 } else // Normal calculation without scaling: if (yeq0) { 365 IAMath.power(xc ,1); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 133 res = IAMath.sqrt(xc); 367 } else res = IAMath.sqrt( IAMath.add(IAMath.sqrtx2y2(xc,yc), xc)); return res; 369 } 371 public static RealInterval INV_SQRT_2() { // optimal inclusion of 1/sqrt(2); 373 RealInterval t = new RealInterval(Inf_rev_sqrt_2 ,0.70710678118654746171500846685377); return t; 375 } 377 public static RealInterval Re_Sqrt_point( RealInterval rez, RealInterval imz ) // 040626 -- 379 { double 381 irez = rez.lo, iimz = imz.lo; 383 if( iimz == 0.0 ) 385 { if( irez >= 0.0 ) 387 return IAMath.sqrt( rez ); else 389 return new RealInterval(0); } 391 else { // iimz <> 0 393 if (irez >= 0.0) return IAMath.mul(INV_SQRT_2(), Sqrt_zpx(rez,imz)); 395 else return IAMath.div(IAMath.mulEsc(INV_SQRT_2() , Math.abs(iimz )) , Sqrt_zpx(rez,imz)); 397 } } 399 public static RealInterval Im_Sqrt_point( RealInterval rez, RealInterval imz ) // 040626 -- 401 { 403 double ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 134 irez = rez.lo, 405 iimz = imz.lo; 407 if( iimz == 0.0 ) { 409 if( irez >= 0.0 ) return new RealInterval(0); 411 else return IAMath.sqrt( IAMath.mulEsc(rez ,-1) ); 413 } else 415 { if( rez.lo >= 0.0 ) 417 return IAMath.div(IAMath.mulEsc( INV_SQRT_2(),iimz) , Sqrt_zpx(rez,imz)); else 419 { if( iimz > 0.0 ) 421 return IAMath.mul(INV_SQRT_2() , Sqrt_zpx(rez,imz)); else 423 return IAMath.mul(IAMath.mulEsc(INV_SQRT_2() ,-1) , Sqrt_zpx(rez,imz)); } 425 } } 427 /* ****************************************************************\ * 12) Método sqrt * 429 * Calcula a raiz quadrada de um número complexo intervalar * * \***************************************************************** 431 */ public static Cinterval sqrt( Cinterval z ) // ------------------------------- 433 { 435 double irez = z.r1.lo, 437 srez = z.r1.hi, ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 135 iimz = z.r2.lo, 439 simz = z.r2.hi; RealInterval hxl = new RealInterval( irez ); 441 RealInterval hxu = new RealInterval( srez ); RealInterval hyl = new RealInterval( iimz ); 443 RealInterval hyu = new RealInterval( simz ); double 445 resxl , resxu , resyl , resyu; if( irez < 0.0 && iimz < 0.0 && simz >= 0.0 ) 447 System.out.println(" z não é a raiz principal."); 449 if (iimz >=0.0) { 451 resxl = Re_Sqrt_point( hxl,hyl ).lo; resxu = Re_Sqrt_point( hxu,hyu ) .hi; 453 resyl = Im_Sqrt_point( hxu,hyl ) .lo; 455 resyu = Im_Sqrt_point( hxl,hyu ) .hi; } else 457 if (simz <=0.0) { resxl = Re_Sqrt_point( hxl,hyu ).lo; 459 resxu = Re_Sqrt_point( hxu,hyl ).hi; 461 resyl = Im_Sqrt_point( hxl,hyl ).lo; resyu = Im_Sqrt_point( hxu,hyu ).hi; 463 } else { resxl = IAMath.sqrt( hxl ).lo ; 465 resxu = ( -iimz > simz ? Re_Sqrt_point( hxu, hyl ).hi : Re_Sqrt_point( hxu, hyu ) .hi ); 467 resyl = Im_Sqrt_point( hxl,hyl ).lo; resyu = Im_Sqrt_point( hxl,hyu ).hi; 469 } return new Cinterval( new RealInterval( resxl ,resxu ), new RealInterval( resyl ,resyu ) ); 471 } 473 /* ****************************************************************\ * 11) Método cos * 475 * Calcula o cosseno de um número complexo intervalar * ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 136 * \***************************************************************** 477 */ public static Cinterval cos(Cinterval z) 479 { RealInterval a = z.r1; 481 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 )) ); 483 } 485 /* ****************************************************************\ * 12) Método sin * 487 * Calcula o seno de um número complexo intervalar * * \***************************************************************** 489 */ public static Cinterval sin(Cinterval z) 491 { RealInterval a = z.r1; 493 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 * 13) Método cosh * * Calcula o cosseno hiperbólico de um número complexo intervalar * 501 * \***************************************************************** ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 137 */ 503 public static Cinterval cosh(Cinterval z) { 505 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 public static Cinterval sinh(Cinterval z) { 519 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 138 535 RealInterval um = new RealInterval(1); if (srez - irez > Math.PI ) 537 // 2 intersections both = true; 539 else { 541 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 if( IAMath.mul(res_l , res_u).lo > 0.0 ) 545 // 2 intersections both = true; 547 else { 549 if( IAMath.mul(res_l , res_u).hi < 0.0 ) { 551 // 1 intersection (3 intersections are PI() apart) // neither of the intervals res_l and res_u contains zero 553 if( res_l.lo > 0.0 ) // "left" intersection 555 left = true; else 557 // "right" intersection right = true; 559 } else 561 { 563 RealInterval sin_2xl = IAMath.sin( IAMath.mulEsc(hxl ,2) ); RealInterval sin_2xu = IAMath.sin( IAMath.mulEsc(hxu ,2) ); 565 if( !IAMath.disjoint( zero , res_l ) ) 567 // intersection on the left boundary { 569 if( sin_2xl.lo >= 0.0 ) // "left" intersection 571 { left = true; 573 // remove the intersection by changing res_l! res_l = IAMath.mulEsc(um, -1); 575 } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 139 else 577 { if( sin_2xl.hi <= 0.0 ) 579 // "right" intersection { 581 right = true; // remove the intersection by changing res_l! 583 res_l = um; } 585 else // zero is interior point of sin_2xl 587 // if the double sine function has optimal precision , // this case should never happen 589 both = true; } 591 } 593 if( !IAMath.disjoint( zero , res_u ) ) // intersection on the right boundary 595 { if( sin_2xu.lo >= 0.0 ) 597 // "left" intersection { 599 left = true; // remove the intersection by changing res_u! 601 res_u = um; } 603 else { 605 if( sin_2xu.hi <= 0.0 ) // "right" intersection 607 { right = true; 609 // remove the intersection by changing res_u! res_u =IAMath.mulEsc(um, -1); 611 } else 613 // zero is interior point of sin_2xu // if the double sine function has optimal precision , 615 // this case should never happen both = true; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 140 617 } } 619 // // finally , check if there is a second intersection 621 // if( IAMath.mul(res_l , res_u).lo < 0.0 ) 623 both = true; } 625 } } 627 // // Calculate extremal values 629 // RealInterval re_tan = IAMath.div(um, IAMath.sinh( IAMath.mulEsc( IAMath.abs( hy ),2) )); 631 // "left" intersection , sin( 2x ) > 0 633 if( left || both ) { 635 resxl = Math.min( resxl , re_tan.hi ); resxu = Math.max( resxu , re_tan .lo ); 637 } 639 // "right" intersection , sin( 2x ) < 0 if( right || both ) 641 { resxl = Math.min( resxl , - re_tan.lo ); 643 resxu = Math.max( resxu , - re_tan.hi ); } 645 } // end horizontal_check 647 /* ****************************************************************\ * 11) Método tan * 649 * Calcula a tangente de um número complexo intervalar * * \***************************************************************** 651 */ ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 141 653 public static Cinterval tan(Cinterval x) { Cinterval z = new Cinterval(); 655 RealInterval rez= x.r1; 657 RealInterval imz= x.r2; double irez=rez.lo; 659 double srez= rez.hi; double iimz= imz.hi; 661 double simz=imz.hi; 663 RealInterval r= new RealInterval(-1); RealInterval r2= new RealInterval(1); 665 RealInterval hxl = new RealInterval(irez); RealInterval hxu = new RealInterval(srez); 667 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 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 ))); 677 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) )); 679 resxl = Math.min( re_tan_l.lo , re_tan_u.lo ); 681 resxu = Math.max( re_tan_l.hi , re_tan_u.hi ) ; 683 // // look for extremal values on horizontal boundaries 685 // if one of the horizontal boundaries is the x-axes , // then the complex tangent is the double tangent on this 687 // boundary , and due to monotonicity , its range // is already included in the ranges of the vertical boundaries 689 // if( irez < srez ) 691 { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 142 693 RealInterval cosh_2yl = IAMath.div(r, IAMath.cosh( IAMath. mulEsc(hyl ,2))); RealInterval cosh_2yu = IAMath.div(r , IAMath.cosh( IAMath. mulEsc(hyu ,2))); 695 if( !(IAMath.disjoint( cos_2rez , cosh_2yl )) && iimz != 0.0 ) 697 //extremal curve intersects lower boundary horizontal_check( hyl, cosh_2yl , irez , srez , hxl, hxu, resxl , resxu ); 699 if(!(IAMath.disjoint( cos_2rez , cosh_2yu )) && simz != 0.0 ) 701 //extremal curve intersects upper boundary horizontal_check( hyu, cosh_2yu , irez , srez , hxl, hxu, resxl , resxu ); 703 } // 705 // 3rd: imaginary part // 707 // evaluate tan on horizontal boundaries // 709 RealInterval cos_rez_2 = IAMath.sqr( IAMath.cos( rez ) ); 711 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 // look for extremal values on vertical boundaries // here , the situation is simpler than for the double part 721 // if 2 intersections with extremal curves appear , // one lies in the lower half plane , the other in the upper half plane 723 // RealInterval cos_2xl = IAMath.cos( IAMath.mulEsc(hxl ,2) ); 725 RealInterval cos_2xu = IAMath.cos( IAMath.mulEsc(hxu ,2) ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 143 RealInterval im_tan; 727 if( iimz < 0.0 ) 729 // 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 if( ( !IAMath.disjoint( cosh_2imz , cos_2xl ) ) ) 737 //extremal curve intersects left boundary //in this case , sin( 2 * xl ) <> 0.0 (no poles here!) 739 { im_tan = IAMath.div(r, IAMath.abs( IAMath.sin( IAMath.mulEsc (hxl ,2) ) )); 741 resyl = Math.min( resyl , im_tan.lo ); resyu = Math.max( resyu , im_tan.hi ); 743 } if( ( !IAMath.disjoint( cosh_2imz , cos_2xu ) ) ) 745 //extremal curve intersects right boundary //in this case , sin( 2 * xu ) <> 0.0 (no poles here!) 747 { im_tan = IAMath.div(r, IAMath.abs( IAMath.sin( IAMath.mulEsc (hxu ,2) ) )); 749 resyl = Math.min( resyl , im_tan.lo ); resyu = Math.max( resyu , im_tan.hi ); 751 } } 753 if( simz > 0.0 ) // intersection in upper half plane? 755 { 757 RealInterval imz_h = new RealInterval( Math.max( iimz , 0.0 ), simz ); 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 763 //extremal curve intersects left boundary //in this case , sin( 2 * xl ) <> 0.0 (no poles here!) 765 { im_tan = IAMath.div(r2,IAMath.abs( IAMath.sin( IAMath.mulEsc (hxl ,2) )) ); 767 resyl = Math.min( resyl , im_tan.lo ); resyu = Math.max( resyu , im_tan.hi ); 769 } if( ( !IAMath.disjoint( cosh_2imz , cos_2xu ) ) ) 771 //extremal curve intersects right boundary //in this case , sin( 2 * xu ) <> 0.0 (no poles here!) 773 { im_tan = IAMath.div(r2,IAMath.abs( IAMath.sin( IAMath.mulEsc (hxu ,2) )) ); 775 resyl = Math.min( resyl , im_tan.lo ); resyu = Math.max( resyu , im_tan.hi ); 777 } } 779 z.r1= new RealInterval( resxl , resxu ); 781 z.r2= new RealInterval( resyl , resyu ); 783 return z; 785 } /* ****************************************************************\ 787 * 12) Método cot * * Calcula a cotangente de um número complexo intervalar * 789 * \***************************************************************** */ 791 public static Cinterval cot( Cinterval z ) { 793 RealInterval r = new RealInterval(Math.PI/2); Cinterval c1= new Cinterval(r); 795 Cinterval c = tan(sub(c1,z)); 797 return c; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 145 } 799 /* ****************************************************************\ 801 * 13) Método tanh * * Calcula a tangente hiperbólica de um número complexo intervalar * 803 * \***************************************************************** */ 805 public static Cinterval tanh( Cinterval z ) { 807 Cinterval res = tan( new Cinterval( z.r1, z.r2 ) ); return new Cinterval( res.r1, res.r2 ); 809 } 811 /* ****************************************************************\ * 14) Método coth * 813 * Calcula a cotangente hiperbólica de um número complexo intervalar * * \***************************************************************** 815 */ public static Cinterval coth( Cinterval z ) 817 { // coth( z ) = i * cot( i * z ); Cinterval zh = new Cinterval( IAMath.mulEsc(z.r1, -1), z.r2 ); // zh = i*z; 819 Cinterval res = cot(zh); return( new Cinterval( IAMath.mulEsc(res.r1, -1),res.r2 ) ); 821 } 823 /* ****************************************************************\ * 14) Método Atan * ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 146 825 * Calcula o arco -tangente de um número complexo intervalar * * \***************************************************************** 827 */ public static RealInterval Atan(RealInterval y, RealInterval x ) 829 { // coth( z ) = i * cot( i * z ); int c = 54; 831 double Infx=(x.lo), Infy=(y.lo); 833 int ex_x=(int)(Math.getExponent(Infx)+1), ex_y=(int)(Math.getExponent(Infy)+1), 835 signx=(int)(Math.signum(Infx)), signy=(int)(Math.signum(Infy)), 837 signq; RealInterval res= new RealInterval(0); 839 if (signy!=0) { 841 signq = signx * signy; if (ex_y -ex_x > c) res = signq >0 ? HALFPI : IAMath.mulEsc( HALFPI ,-1); 843 else res = IAMath.arctan(IAMath.div(y,x)); } 845 847 return res; } 849 /* ****************************************************************\ 851 * 14) Método Atan * * Calcula o arco -tangente de um número complexo intervalar * 853 * \***************************************************************** */ 855 public static RealInterval Atan(RealInterval y, double x ) { 857 return Atan(y,new RealInterval(x)); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 147 } 859 861 /* ****************************************************************\ * 14) Método Arg * 863 * Calcula o argumento de um número complexo intervalar * * \***************************************************************** 865 */ public static RealInterval Arg(Cinterval z) 867 { 869 double srez = z.r1.hi, 871 irez = z.r1.lo, simz = z.r2.hi, 873 iimz = z.r2.lo; 875 RealInterval hxl = new RealInterval(irez); RealInterval hxu= new RealInterval(srez); 877 RealInterval hyl= new RealInterval(iimz); RealInterval hyu= new RealInterval(simz); 879 double resl , resu; 881 if( iimz > 0.0 ) 883 // case I: Im(z) > 0 { 885 resl = ( srez > 0.0 ? Atan( hyl,hxu ).lo : ( srez < 0.0 ? Atan( hyu,hxu ).lo + Math.PI : HALFPI.lo ) ); resu = ( irez > 0.0 ? Atan( hyu,hxl ).hi : ( irez < 0.0 ? Atan( hyl,hxl ).hi + Math.PI : HALFPI.hi ) ); 887 return new RealInterval( resl , resu ); } 889 else { 891 if( simz < 0.0 ) // case II: Im(z) < 0 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 148 893 { resl = ( irez < 0.0 ? Atan( hyu,hxl ).lo - Math.PI : ( irez > 0.0 ? Atan( hyl,hxl ).lo : - HALFPI.lo ) ); 895 resu = ( srez < 0.0 ? Atan( hyl,hxu ).hi - Math.PI : ( srez > 0.0 ? Atan( hyu,hxu ).hi : - HALFPI.lo ) ); return new RealInterval( resl , resu ); 897 } else 899 // 0 in Im(z) { 901 if( irez > 0.0 ) // case III: Re(z) > 0 903 // z contains positive double values { 905 resl = ( iimz < 0.0 ? Atan( hyl,hxl ).hi : 0.0 ); return new RealInterval( resl , Atan( hyu,hxl ).hi ); 907 } else 909 // z contains nonpositive double numbers { 911 if( irez < 0.0 ) { 913 // case IV: z contains negative double numbers System.out.println ("z contém números negativos"); 915 return new RealInterval (0.0); } 917 else // case V: 0 in z, but z doesn’t contain negative double numbers 919 { if( srez > 0.0 ) 921 // diam( Re(z) > 0.0 ) { 923 resl = ( iimz < 0.0 ? - HALFPI.hi : 0.0 ); resu = ( simz > 0.0 ? HALFPI.hi : 0.0 ); 925 return new RealInterval( resl , resu ); } 927 else // Re(z) == 0.0 929 { if( iimz == 0.0 && simz == 0.0 ) 931 // Z == 0 return new RealInterval(0); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 149 933 else { 935 resl = ( iimz < 0.0 ? - HALFPI.hi : HALFPI.lo ); resu = ( simz > 0.0 ? HALFPI.hi : - HALFPI.lo ); 937 return new RealInterval( resl , resu ); } 939 } } 941 } } 943 } 945 } 947 /* ****************************************************************\ 949 * 14) Método arg * * Calcula o argumento de um número complexo intervalar * 951 * \***************************************************************** */ 953 public static RealInterval arg(Cinterval z) { double 955 srez = z.r1.hi; double irez = z.r1.lo; 957 double simz = z.r2.hi; double iimz = z.r2.lo; 959 double resl , resu; 961 if( irez < 0.0 && iimz <= 0.0 && simz >= 0.0 ) 963 // z contains negative real values { 965 if( srez > 0.0 ) // 0 in z and 0 interior point of Re(z) 967 { resl = ( iimz < 0.0 ? - Math.PI : 0.0 ); 969 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 ); 971 } else 973 { // srez <= 0.0 if( iimz == simz ) 975 // z is real interval containing no positive values return new RealInterval(Math.PI); 977 else // sup( Re(z) ) <= 0, diam( Im(z) ) > 0 979 { if( srez == 0.0 ) 981 { resl = ( simz > 0.0 ? Math.PI/2 : - Math.PI ); 983 resu = ( iimz < 0.0 ? ( simz > 0.0 ? IAMath.mulEsc( HALFPI ,3 ).hi : - HALFPI.hi ) : Math.PI ); return new RealInterval( resl , resu ); 985 } else 987 // sup( Re(z) ) < 0, diam( Im(z) ) > 0 { 989 RealInterval hyl= new RealInterval(iimz); RealInterval hyu= new RealInterval(simz); 991 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 : 993 IAMath.sub(Atan( hyl,srez ) , new RealInterval(Math.PI )).hi) : Math.PI ); return new RealInterval( resl , resu ); 995 } } 997 } } 999 else // Arg(z) is well -defined 1001 return Arg( z ); } 1003 public static RealInterval ln_sqrtx2y2(RealInterval x, RealInterval y){ 1005 RealInterval ad= IAMath.add(IAMath.sqr(x),IAMath.sqr(y)); RealInterval log = IAMath.ln(ad); 1007 return IAMath.mulEsc(log ,0.5); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 151 1009 } 1011 public static Cinterval sqrtp1m1(Cinterval z) 1013 { double c = 1.5; 1015 Cinterval res; RealInterval absz = mod(z); 1017 double Sup_absz=(absz.hi); 1019 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))))); 1021 else res = sub(sqrt(add(z, new Cinterval(new RealInterval(1), new RealInterval(1)))), new Cinterval(new RealInterval(1), new RealInterval(1))); 1023 return res; } 1025 public static Cinterval sqrt1mx2(Cinterval z) 1027 { 1029 double c = 5e8; Cinterval res,u; 1031 RealInterval absz=(mod(z)); double Inf_absz=(absz.lo); 1033 if (Inf_absz > c) 1035 { absz = IAMath.div(new RealInterval(1), new RealInterval( Inf_absz)); 1037 Inf_absz = absz.hi; res = new Cinterval(new RealInterval(-Inf_absz ,Inf_absz), 1039 new RealInterval(-Inf_absz ,Inf_absz)); // res = Delta u = new Cinterval(IAMath.mulEsc(z.r2,-1),z.r1); // u = i*z ; 1041 // res is the correcture interval , i.e. // i*z + res or -i*z + res is the inclusion of sqrt{1-z^2} 1043 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); } 1045 else { 1047 res = sub(new Cinterval(new RealInterval(1), new RealInterval (1)),z); u = add(new Cinterval(new RealInterval(1), new RealInterval(1) ),z); 1049 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))); } 1051 if (res.r1.lo <0) res = new Cinterval( new RealInterval(0.0,res.r1.hi) , res.r2) ; 1053 return res; 1055 } 1057 public static RealInterval f_aux_asin(RealInterval x, RealInterval y ) 1059 // f_aux_asin(z) = ( |z+1| + |z-1| ) / 2 { 1061 RealInterval um = new RealInterval(1); RealInterval res; 1063 if (y.lo==0 && y.hi==0 && IAMath.abs(x).lo == 1.0 && IAMath.abs( x).hi == 1.0) res = new RealInterval (1.0); 1065 else{ 1067 res = IAMath.div(IAMath.add(IAMath.sqrtx2y2(IAMath.add(x,um),y), IAMath.sqrtx2y2(IAMath.sub(x,um),y)),new RealInterval(2) ); 1069 1071 } if ( res.hi==java.lang.Double.POSITIVE_INFINITY ) // Blomquist: program stop , if overflow occurs. 1073 { 1075 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 153 System.out.println(" z fora de alcance"); 1077 } 1079 double hlb = Math.max( 1.0, Math.abs( x.hi ) ); if( res .lo < hlb ) 1081 // invalid overestimation! res = new RealInterval( hlb, res.hi ); 1083 return res; 1085 } 1087 1089 public static RealInterval f_aux_asin_Vn(RealInterval x, RealInterval y) 1091 { // normal calculation of V; RealInterval V,f1,f2; 1093 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))))); 1095 V=IAMath.times2pown(V,-1); return V; 1097 } // f_aux_asin_Vn 1099 public static RealInterval ACOSH_p1(RealInterval x, RealInterval y ) { // Calculating an inclusion for acosh(1+V/2) if |x|<1; 1101 int p = -80; double r1=y.lo; 1103 double t; int ex= (int)Math.getExponent(r1)+1; 1105 RealInterval res= new RealInterval (0.0),u,V; 1107 if (ex >-2000 && ex <= -80) { u = IAMath.div(IAMath.abs(y),IAMath.sqrt1mx2(x)); 1109 t = u.lo; res = new RealInterval(t,u.hi); 1111 } else if (ex>p) { 1113 V = f_aux_asin_Vn(x,y); // usual calculation ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 154 res = IAMath.acoshp1(V); 1115 } return res; 1117 } // ACOSH_p1 1119 1121 public static RealInterval ACOSH_f_aux( RealInterval x, RealInterval y ) 1123 // Calculating acosh( f_aux_asin(x,y) ); x,y: point intervals !! { 1125 RealInterval res,delta; double rx=Math.abs(x.lo); 1127 double ry=Math.abs(y.lo); 1129 if (rx >2.0 || ry >2.0) { res = IAMath.coshI( f_aux_asin(x,y) ); // as before! 1131 } 1133 else { 1135 if (rx == 1.0) { 1137 delta = IAMath.abs(y); 1139 if (Math.getExponent(delta.lo)+1<=-50) { 1141 res = IAMath.sqrt(delta); 1143 rx = res.hi; if (rx >0) res = 1145 new RealInterval(Math.nextAfter(res.lo,Double.MIN_VALUE) ,Math.nextUp(rx)); } else { 1147 RealInterval aux=IAMath.div(IAMath.abs(y), new RealInterval(2)); // delta: |y|/2; 1149 delta = IAMath.add(IAMath.sqrtp1m1(IAMath.sqr(aux)) , aux) ; 1151 res = IAMath.acoshp1(delta); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 155 1153 } 1155 } else 1157 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) )); 1159 } return res; 1161 } // ACOSH_f_aux 1163 public static RealInterval Asin_beta( RealInterval x, RealInterval y ) 1165 { double c1 = 0.75; 1167 boolean neg_b; double Infxa; 1169 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 if (beta.lo<-1) 1179 beta.lo=-1; if (beta.hi> 1) 1181 beta.hi=1; abs_beta = IAMath.abs(beta); 1183 if (abs_beta.lo=c1; Calculation now with improvements: 1189 xa = x; neg_b = x.lo <0; 1191 if (neg_b) xa = IAMath.mulEsc(xa,-1); // Inf(xa) >0 : ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 156 Infxa = xa.lo; 1193 if (Infxa > 1) { tm = IAMath.div(y,IAMath.sub(xa,new RealInterval(1))); 1195 tp = IAMath.div(y,IAMath.add(xa,new RealInterval(1))); u = IAMath.sqrtp1m1(IAMath.sqr(tm)); 1197 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)) ); 1199 } else if (Infxa == 1) { 1201 u = IAMath.abs(y); u=IAMath.div(IAMath.abs(y), new RealInterval(2)); // u = |y |/2 1203 delta = IAMath.sub(u, IAMath.sqrtp1m1(IAMath.sqr(u))); } else { 1205 tp = IAMath.add(new RealInterval(1),xa); tm = IAMath.sub(new RealInterval(1),xa); 1207 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); 1209 } res = IAMath.sub(HALFPI , IAMath.arcsin( IAMath.sqrt(IAMath.mul( delta ,(IAMath.sub(new RealInterval(2),delta))))) ); 1211 if (neg_b) res = IAMath.mulEsc(res, -1); } 1213 return res; } 1215 public static Cinterval asin( Cinterval z ) // ---------------------- 040730 -- 1217 { double gr = 6.355804e307; // upper bound for abs(rez),abs(imz) 1219 RealInterval rez = z.r1, 1221 imz = z.r2; 1223 double irez = rez.lo, srez = rez.hi, 1225 iimz = imz.lo, simz = imz.hi; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 157 1227 RealInterval hxl= new RealInterval(irez); 1229 RealInterval hxu=new RealInterval(srez); RealInterval hyl=new RealInterval(iimz); 1231 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); 1237 // 1239 // 1st: check for singularities // 1241 if( (irez <-1 && (bl || (iimz <0 && simz==0))) || (srez >1 && (bl || (iimz==0 && simz >0))) ) 1243 System.out.println("Erro no Arco Cosseno"); // 1245 // check for too large bounds of abs(rez) and abs(imz) to prevent // overflow by calculating f_aux_asin (...) 1247 // resxl = Math.max(Math.abs(irez),Math.abs(srez)); 1249 resxu = Math.max(Math.abs(iimz),Math.abs(simz)); if (resxl >gr || resxu >gr) 1251 System.out.println("Erro no Arco Cosseno 2"); // 1253 // 2nd: real part // 1255 if( iimz < 0.0 && simz > 0.0 ) // z intersects [-1,1] 1257 { 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 ) ) ) ) ); 1265 resxl = Asin_beta(hxl,new RealInterval( Math.max(-iimz ,simz) )) .lo; // Blomquist , 19.06.2005; } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 158 1267 if( srez < 0.0 ) // resxu = Sup( asin( hxu / f_aux_asin( hxu, interval( max( - iimz , simz ) ) ) ) ); 1269 resxu = Asin_beta(hxu,new RealInterval( Math.max(-iimz ,simz) )) .hi; // Blomquist , 19.06.2005; else 1271 resxu = IAMath.arcsin( hxu ) .hi; } 1273 else { 1275 if( ( iimz >= 0.0 && irez >= 0.0 ) || ( simz <= 0.0 && irez <= 0.0 ) ){ 1277 // left boundary in quadrants I or III // min( Re( z ) ) in upper left corner 1279 resxl = Asin_beta(hxl,hyu) .lo; // Blomquist , 19.06.2005; 1281 } else{ 1283 // left boundary in quadrants II or IV // min( Re( z ) ) in lower left corner 1285 // resxl = Inf( asin( hxl / f_aux_asin( hxl, hyl ) ) ); 1287 resxl = Asin_beta(hxl,hyl) .lo; // Blomquist , 19.06.2005; } 1289 if( ( iimz >= 0.0 && srez >= 0.0 ) || ( simz <= 0.0 && srez <= 0.0 ) ){ // right boundary in quadrants I or III 1291 // max( Re( z ) ) in lower right corner // resxu = Sup( asin( hxu / f_aux_asin( hxu, hyl ) ) ); 1293 resxu = Asin_beta(hxu,hyl) .hi; // Blomquist , 19.06.2005; 1295 } else 1297 // right boundary in quadrants II or IV // max( Re( z ) ) in upper right corner 1299 // resxu = Sup( asin( hxu / f_aux_asin( hxu, hyu ) ) ); resxu = Asin_beta(hxu,hyu) .hi; // Blomquist , 19.06.2005; 1301 } // 1303 // 3rd: imaginary part // 1305 if (raxis) { // Interval argument is now a subset of the real ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 159 axis. // Blomquist , 16.06.2005; 1307 if (srez <0.0) resyl = ACOSH_f_aux( hxu, hyu ).lo; else resyl = - ACOSH_f_aux( hxu, hyu ).hi; 1309 if (irez >0.0) resyu = -ACOSH_f_aux( hxl, hyu ).lo; else resyu = ACOSH_f_aux( hxl, hyu ).hi; 1311 } else if( simz <= 0.0 ) 1313 // z in lower half plane 1315 // min( Im( z ) ) in point with max |z| // max( Im( z ) ) in point with min |z| 1317 { 1319 if( irez < -srez ) // most of z in quadrant III 1321 { 1323 resyl = - ACOSH_f_aux( hxl, hyl ) .hi; if( srez < 0.0 ) 1325 resyu = - ACOSH_f_aux( hxu, hyu ).lo; 1327 else 1329 resyu = - ACOSH_f_aux( new RealInterval(0), hyu ) .lo; 1331 } 1333 else // most of z in quadrant IV 1335 { 1337 resyl = - ACOSH_f_aux( hxu, hyl ) .hi; System.out.println(resyl); 1339 if( irez > 0.0 ){ resyu = - ACOSH_f_aux( hxl, hyu ) .lo; 1341 } 1343 else resyu = - ACOSH_f_aux( new RealInterval(0), hyu ) .lo; 1345 } } 1347 else if( iimz >= 0.0 ) ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 160 // z in upper half plane 1349 // min( Im( z ) ) in point with min |z| // max( Im( z ) ) in point with max |z| 1351 { 1353 if( irez < -srez ) // if( irez + srez < 0.0 ) 1355 // most of z in quadrant II { 1357 resyu = ACOSH_f_aux( hxl, hyu ) .hi; if( srez < 0.0 ) 1359 resyl = ACOSH_f_aux( hxu, hyl ) .lo; else 1361 resyl = ACOSH_f_aux( new RealInterval(0), hyl ) .lo; } 1363 else // most of z in quadrant I 1365 { 1367 resyu = ACOSH_f_aux( hxu, hyu ) .hi; 1369 if( irez > 0.0 ){ 1371 resyl =ACOSH_f_aux( hxl, hyl ) .lo; 1373 } else 1375 resyl = ACOSH_f_aux( new RealInterval(0), hyl ) .lo; } 1377 } else 1379 // z intersects imaginary axes // min( Im( z ) ) in point in lower half plane with max |z| 1381 // max( Im( z ) ) in point in upper half plane with max |z| { 1383 if( irez < -srez ) // if( irez + srez < 0.0 ) // most of z in quadrants II and IV 1385 { resyl = - ACOSH_f_aux( hxl, hyl ) .hi; 1387 resyu = ACOSH_f_aux( hxl, hyu ) .hi; } 1389 else { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 161 1391 resyl = - ACOSH_f_aux( hxu, hyl ).hi; resyu = 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; 1401 // Re(acos(z)) = acos[ 2x/(sqrt[(x+1)^2+y^2] + sqrt[(x-1)^2+y^2]) ] { 1403 RealInterval um = new RealInterval(1); 1405 double c1 = 0.75; RealInterval res= new RealInterval(0),beta ,delta ,tm,tp,u,v,xa; 1407 double Infy=y.lo,Infx=x.lo; RealInterval aux, aux2 , aux3; 1409 aux=IAMath.sqrtx2y2(IAMath.add(um,x),y); 1411 aux2=IAMath.sqrtx2y2(IAMath.sub(um,x),y); aux3=IAMath.div(IAMath.add(aux,aux2), new RealInterval(2)); 1413 beta = IAMath.div(x, aux3); 1415 if (beta.lo<-1) beta.lo=-1; if (beta.hi> 1) beta.hi= 1; 1417 if (beta.hi -1 xa = IAMath.mulEsc(x,-1); // Inf(xa)>0: 1421 Infx = -Infx; // Infx > 0: if (Infx > 1) { 1423 tm = IAMath.div(y,(IAMath.sub(xa, um))); 1425 tp = IAMath.div(y,(IAMath.add(xa, um))); u = IAMath.sqrtp1m1(IAMath.sqr(tm)); 1427 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 162 1429 IAMath.add(IAMath.add(new RealInterval(2),u),v)); } else 1431 if (Infx == 1) { u = IAMath.abs(y); 1433 u=IAMath.div(IAMath.abs(y), new RealInterval(2)); // u = |y|/2 delta = IAMath.sub(u , IAMath.sqrtp1m1(IAMath.sqr(u))) ; 1435 } else { tm = IAMath.div(y,(IAMath.sub(um, xa))); 1437 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))))); 1439 delta=IAMath.times2pown(delta ,-1); } 1441 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 1443 else // Sup(beta)>=c1 if (Infx >1) 1445 { 1447 tm = IAMath.div(y, IAMath.sub(x,um)); if (Math.getExponent(tm.hi)+1<=-27) { 1449 if (Infy!=0) { u = IAMath.div(new RealInterval(Math.abs(Infy)), IAMath. sqrtx2m1(x)); 1451 res = u; } 1453 } else { tp =IAMath.div(y, IAMath.add(x,um)); 1455 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)); 1459 res = IAMath.arcsin(IAMath.sqrt(IAMath.mul(delta ,(IAMath. sub(new RealInterval(2),delta))))); } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 163 1461 } else if (Infx==1) { 1463 if (Math.getExponent(y.lo)+1<=-52) { 1465 u = IAMath.sqrt(IAMath.abs(y)); if (u.hi==0) res = new RealInterval(0); 1467 else res = u; } else { 1469 1471 u = IAMath.abs(y); RealInterval aux5 = IAMath.div(IAMath.abs(y), new RealInterval(2)); // u = |y|/2 1473 delta = IAMath.sub(aux5 , IAMath.sqrtp1m1(IAMath.sqr( aux5))); 1475 res = IAMath.arcsin( IAMath.sqrt(IAMath.mul(delta ,( IAMath.sub(new RealInterval(2),delta)))) ); } 1477 } else { tp = IAMath.add(um,x); 1479 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))))); 1481 delta=IAMath.times2pown(delta ,-1); res = IAMath.arcsin( IAMath.sqrt(IAMath.mul(delta ,(IAMath. sub(new RealInterval(2),delta)))) ); 1483 } 1485 return res; } 1487 public static Cinterval asinh( Cinterval z ) 1489 // // asinh( Z ) = i * asin( -i * z ) 1491 // 1493 { Cinterval res = asin( new Cinterval( z.r2, IAMath.mul(z.r1, new RealInterval(-1))) ); 1495 return new Cinterval( IAMath.mulEsc(res.r2,-1), res.r1 ); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 164 } 1497 public static Cinterval acos( Cinterval z ) // --------------------- 040730 -- 1499 { double gr = 6.355804e307; // upper bound for abs(rez),abs(imz) 1501 RealInterval rez = z.r1, 1503 imz = z.r2; double 1505 irez = rez.lo, srez = rez.hi, 1507 iimz = imz.lo, simz = imz.hi; 1509 RealInterval hxl= new RealInterval(irez); 1511 RealInterval hxu= new RealInterval(srez); RealInterval hyl= new RealInterval(iimz); 1513 RealInterval hyu= new RealInterval(simz); boolean bl = (iimz < 0.0) && (simz >0.0), 1515 raxis = (iimz==0.0) && (simz==0); double 1517 resxl , resxu , resyl , resyu; // 1519 // 1st: check for singularities // 1521 if( (irez <-1 && (bl || (iimz <0 && simz==0))) || (srez >1 && (bl || (iimz==0 && simz >0))) ) 1523 System.out.println("Erro ACOS."); // 1525 // check for too large bounds of abs(rez) and abs(imz) to prevent // overflow by calculating f_aux_asin (...) 1527 // resxl = Math.max(Math.abs(irez),Math.abs(srez)); 1529 resxu = Math.max(Math.abs(iimz),Math.abs(simz)); if (resxl >gr || resxu >gr) 1531 System.out.println("Erro ACOS 2."); // 1533 // 2nd: real part // 1535 // Blomquist , 06.06.2005; if( iimz < 0.0 && simz > 0.0 ) ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 165 1537 // z intersects [-1,1] on the x-axis { 1539 if( irez <= 0.0 ) resxu = IAMath.arccos( hxl ) .hi; else resxu = Acos_beta(hxl,new RealInterval( Math.max(-iimz , simz) )) .hi; 1541 if( srez < 0.0 ) resxl = Acos_beta(hxu,new RealInterval(Math.max(-iimz ,simz) )) .lo; 1543 else resxl = IAMath.arccos( hxu ) .lo; } 1545 else { 1547 if (irez <0 && srez >0) // z intersects the posizive or negative y-axis 1549 if (iimz >= 0) { resxl = Acos_beta(hxu,hyl) .lo; 1551 resxu = Acos_beta(hxl,hyl) .hi; } else { 1553 resxl = Acos_beta(hxu,hyu) .lo; resxu = Acos_beta(hxl,hyu) .hi; 1555 } else 1557 { if( ( iimz >= 0.0 && irez >= 0.0 ) || ( simz <= 0.0 && irez < 0.0 ) ){ 1559 // 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 1567 // min( Re( z ) ) in upper right corner resxl = Acos_beta(hxu,hyu) .lo; 1569 if( ( iimz >= 0.0 && srez > 0.0 ) || ( simz <= 0.0 && srez <= 0.0 ) ) // right boundary in quadrants I or III 1571 // max( Re( z ) ) in upper left corner resxu = Acos_beta(hxl,hyu) .hi; 1573 else{ // right boundary in quadrants II or IV 1575 // max( Re( z ) ) in lower left corner ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 166 1577 resxu = Acos_beta(hxl,hyl) .hi; } 1579 } } 1581 // // 3rd: imaginary part 1583 // if (raxis) { // Interval argument is now a subset of the real axis. 1585 // Blomquist , 16.06.2005; if (srez <0.0) resyl = ACOSH_f_aux( hxu, hyu ).lo; 1587 else resyl = - ACOSH_f_aux( hxu, hyu ).hi; if (irez >0.0) resyu = -ACOSH_f_aux( hxl, hyu ).lo; 1589 else resyu = ACOSH_f_aux( hxl, hyu ).hi; } else 1591 if( simz <= 0.0 ) // z in lower half plane 1593 // min( Im( z ) ) in point with max |z| // max( Im( z ) ) in point with min |z| 1595 { if( irez + srez < 0.0 ) 1597 // most of z in quadrant III { 1599 resyl = - ACOSH_f_aux( hxl, hyl ) .hi; if( srez < 0.0 ) 1601 resyu = - ACOSH_f_aux( hxu, hyu ) .lo; else 1603 resyu = - ACOSH_f_aux( new RealInterval(0), hyu ) .lo; } 1605 else // most of z in quadrant IV 1607 { 1609 resyl = - ACOSH_f_aux( hxu, hyl ) .hi; if( irez > 0.0 ) 1611 resyu = - ACOSH_f_aux( hxl, hyu ) .lo; else 1613 resyu = - ACOSH_f_aux( new RealInterval(0), hyu ) .lo; } 1615 } else if( iimz >= 0.0 ) 1617 // z in upper half plane ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 167 // min( Im( z ) ) in point with min |z| 1619 // max( Im( z ) ) in point with max |z| 1621 { 1623 if( irez < -srez ) // if( irez + srez < 0.0 ) // most of z in quadrant II 1625 { 1627 resyu = ACOSH_f_aux( hxl, hyu ) .hi; if( srez < 0.0 ) 1629 resyl = ACOSH_f_aux( hxu, hyl ) .lo; else 1631 resyl = ACOSH_f_aux( new RealInterval(0), hyl ) .lo; } 1633 else // most of z in quadrant I 1635 { resyu = ACOSH_f_aux( hxu, hyu ) .hi; 1637 if( irez > 0.0 ) resyl = ACOSH_f_aux( hxl, hyl ).lo; 1639 else resyl = ACOSH_f_aux( new RealInterval(0), hyl ) .lo; 1641 } } 1643 else // z intersects imaginary axes 1645 // min( Im( z ) ) in point in lower half plane with max |z| // max( Im( z ) ) in point in upper half plane with max |z| 1647 { if( irez < -srez ) // if( irez + srez < 0.0 ) 1649 // most of z in quadrants II and IV { 1651 resyl = - ACOSH_f_aux( hxl, hyl ) .hi; resyu = ACOSH_f_aux( hxl, hyu ) .hi; 1653 } else 1655 { resyl = - ACOSH_f_aux( hxu, hyl ) .hi; 1657 resyu = ACOSH_f_aux( hxu, hyu ) .hi; } 1659 } ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 168 1661 return new Cinterval( new RealInterval( resxl , resxu ), IAMath. mulEsc(new RealInterval( resyl , resyu ),-1) ); 1663 } 1665 public static Cinterval acosh( Cinterval z ) // 1667 // acosh( z ) = i * acos( z ) = +/- i * ( pi / 2 - asin( z ) ) // 1669 { RealInterval 1671 rez = z.r1, imz = z.r2; 1673 double 1675 irez = rez.lo, srez = rez.hi, 1677 iimz = imz.lo, simz = imz.hi; 1679 RealInterval hxl=new RealInterval(irez); 1681 RealInterval hxu=new RealInterval(srez); RealInterval hyl=new RealInterval(iimz); 1683 RealInterval hyu=new RealInterval(simz); 1685 double resxl , resxu , resyl , resyu; 1687 // cinterval res; 1689 // 1691 // 1st: check for singularities // 1693 if( ( iimz <= 0.0 && simz >= 0.0 ) && ( irez < 1.0 ) ) System.out.println("Erro no ACOSH"); 1695 // With this restriction the complex interval argument and the real axis must not have any common // point , if irez < +1; 1697 // So for example the negative real axis must not be touched from above if irez <1, although this // should be possible if the principal branch is considered! So the above restriction is too widely in 1699 // some cases; Blomquist , 21.06.2005; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 169 // 1701 // 2nd: z in upper half plane (or on the real axis) // acosh( z ) = + i * ( pi / 2 - asin( z ) ) 1703 // if( iimz > 0.0 ) 1705 { 1707 Cinterval res = acos(z); 1709 return new Cinterval( IAMath.mulEsc(res.r2,-1),res.r1 ); } 1711 // // 3rd: z in lower half plane 1713 // acosh( z ) = - i * ( pi / 2 - asin( z ) ) // 1715 if( simz < 0.0 ) { 1717 // cinterval res = HALFPI() - asin( z ); Cinterval res = acos(z); // Blomquist , 14.06.2005 1719 return new Cinterval( res.r2, IAMath.mulEsc(res.r1,-1) ); } 1721 // // z intersects [1,infinity) 1723 // // real part 1725 // minimum on the left on real axes , maximum in lower or upper right corner // 1727 resxl =IAMath.coshI( hxl ) .lo; RealInterval ytilde= new RealInterval(( Math.max( -iimz , simz ) )); 1729 // resxu = Sup( acosh( f_aux_asin( hxu, ytilde ) ) ); resxu = ACOSH_f_aux(hxu,ytilde) .hi; // Blomquist , 14.06.2005; 1731 // // imaginary part 1733 // minimum in lower left corner , maximum in upper left corner // 1735 // resyl = -Sup( acos( hxl / f_aux_asin( hxl, hyl ) ) ); resyl = -Acos_beta(hxl,hyl) .hi; // Blomquist , 14.06.2005; 1737 // 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 public static double re_vert1( double x, RealInterval hx, 1745 double rew_inf , double rew_sup , double resxl ) //---------------------- 040729 -- 1747 // // Subroutine of analytic inverse tangent function. 1749 // Evaluate real part on a vertical boundary. // 1751 { 1753 RealInterval dois = new RealInterval(2); if( x == 0.0 ) 1755 // singularities have been handled before , hence Re( w ) > 0 { 1757 resxl = 0.0; 1759 return resxl; } 1761 else { 1763 if( x > 0.0 ) // w in quadrants I and/or II 1765 // atan is the inverse function of tan(t), t in (-pi/2,pi /2). { 1767 1769 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 1771 : IAMath.div(HALFPI ,dois ).lo ); 1773 return resxl; 1775 } else 1777 // 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 1781 : ( rew_inf > 0.0 ? IAMath.div(Atan( IAMath.mul(dois ,hx) ,rew_inf ),dois ).lo : -IAMath.div(HALFPI ,dois ).hi ); 1783 return resxl; } 1785 } } // re_vert 1787 public static double re_vert2( double x, RealInterval hx, 1789 double rew_inf , double rew_sup , double resxu ) //---------------------- 040729 -- 1791 // // Subroutine of analytic inverse tangent function. 1793 // Evaluate real part on a vertical boundary. // 1795 { 1797 RealInterval dois = new RealInterval(2); if( x == 0.0 ) 1799 // singularities have been handled before , hence Re( w ) > 0 { 1801 resxu = 0.0; 1803 return resxu; } 1805 else { 1807 if( x > 0.0 ) // w in quadrants I and/or II 1809 // 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 1815 : IAMath.div(HALFPI ,dois) .hi); 1817 return resxu; 1819 } else 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 1825 : ( rew_sup > 0.0 ? IAMath.div(Atan( IAMath.mulEsc(hx ,2) ,rew_sup ),dois) .hi : -IAMath.div(HALFPI ,dois) .lo); 1827 return resxu; } 1829 } } // re_vert 1831 public static RealInterval Aux_1_atan(double x) 1833 // x>=0; // Calculating: ln[ 1+2/(sqrt(1+x^2) -1) ], [x] = x, 1835 // [x] is a point interval ! // Blomquist; 19.02.05; 1837 { int exOv = +54; 1839 int exUn = -26; 1841 RealInterval res, ix= new RealInterval(x), // ix is point interval with x>=0; 1843 r,t; int ex=((int)Math.getExponent(x))+1; 1845 if (ex>=exOv) { // preventing overflow 1847 r = IAMath.div(new RealInterval(2),ix); t = IAMath.mul(r,new RealInterval(Math.nextAfter(1.0,Double. MIN_VALUE))); 1849 r = IAMath.mulEsc(r,Math.nextUp(1.0)); res = new RealInterval(t.lo,r.hi); 1851 } else if (ex<=exUn) { // x < 2^(-27) 1853 res = IAMath.sub(U_atan , IAMath.mulEsc(IAMath.ln(ix),2)); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 173 } else { // normal calculation 1855 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) ))); 1857 res = IAMath.ln(aux); // res = ln[1 + 2/(sqrt(1+x^2) -1) ] } 1859 return res; } // Aux_1_atan 1861 1863 public static RealInterval Q_atan_UPSIGN(RealInterval x, RealInterval y) { 1865 // x: abs(Re(z)); x is real interval // y: Inf(Im(z)); y is point interval 1867 // Q_atan_UPSIGN: ln[ 1 + 4y/(x^2+(1-y)^2) ] RealInterval um= new RealInterval(1); 1869 RealInterval dois= new RealInterval(2); RealInterval quatro= new RealInterval(4); 1871 int n = 511; RealInterval res,t,t1,t2; 1873 int ex_x ,ex,s; if (y.lo==1.0 && y.hi==1.0) { 1875 if (x.lo >1.0) { 1877 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); t = IAMath.div(dois ,t); 1891 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 174 t1 = IAMath.lnp1(IAMath.sqr(t)); 1893 t = new RealInterval(x.lo); 1895 t2 = IAMath.sub(IAMath.ln(IAMath.add(quatro ,IAMath.sqr(t)) ) , IAMath.mulEsc(IAMath.ln(t),2)); res = new RealInterval(t1.lo,t2.hi); 1897 } } else { // y <> [1,1] 1899 ex_x = (int) Math.getExponent( IAMath.abs(x).hi )+1; 1901 ex = (int) Math.getExponent( IAMath.abs(y).hi )+1; if (ex_x >ex) ex = ex_x; // Maximum 1903 if (ex>n) { // scaling: s = n-ex -1; 1905 t = x; t=IAMath.times2pown(t,s); // fast scaling with 2^(s) 1907 t1 = y; 1909 t1=IAMath.times2pown(t1,s); // fast scaling with 2^(s) 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); 1919 } else res = IAMath.lnp1(IAMath.div(IAMath.mulEsc(y,4) ,(IAMath .add(IAMath.sqr(x),IAMath.sqr(IAMath.sub(um,y)))))); // normal calculation } 1921 return res; } // Q_atan_UPSIGN 1923 1925 /* public static RealInterval Q_atan_UPSIGN(RealInterval x, RealInterval y) { 1927 // x: abs(Re(z)); x is real interval ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 175 // y: Inf(Im(z)); y is point interval 1929 // Q_atan_UPSIGN: ln[ 1 + 4y/(x^2+(1-y)^2) ] System.out.println("x: "+x); 1931 int n = 511; RealInterval res,t,t1,t2; 1933 int ex_x ,ex,s; if (y.lo==1.0 && y.hi==1.0) { 1935 if (x.lo >1.0) { 1937 t = IAMath.div(new RealInterval(2),x); 1939 1941 res = IAMath.lnp1(IAMath.sqr(t)); 1943 } else 1945 if(x.hi <1) { res = IAMath.sub(IAMath.ln(IAMath.add(new RealInterval(4),IAMath.sqr(x))) , IAMath. mulEsc(IAMath.ln(x),2)); 1947 System.out.println("tou aki"); System.out.println("res: "+res); 1949 }else { // Punkt 3.: 1951 t = new RealInterval(x.hi); t = IAMath.div(new RealInterval(2),t); 1953 1955 t1 = IAMath.lnp1(IAMath.sqr(t)); t = new RealInterval(x.lo); 1957 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); 1959 } } 1961 else { // y <> [1,1] 1963 ex_x = (int)Math.exp( IAMath.abs(x).hi ); ex = (int)Math.exp(IAMath.abs(y).hi ); 1965 if (ex_x >ex) ex = ex_x; // Maximum if (ex>n) { // scaling: ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 176 1967 s = n-ex -1; t = x; 1969 t=IAMath.power(t,s); // fast scaling with 2^(s) t1 = y; 1971 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 1973 t = IAMath.div(y , t2); // scaled quotient t=IAMath.power(t,2*s+2); // back -scaling with 2^(s +2); ’+2’: factor 4 !! 1975 res = IAMath.lnp1(t); 1977 } else { 1979 t=IAMath.add(IAMath.sqr(x),IAMath.sqr(IAMath.sub(new RealInterval(1),y))); 1981 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); 1983 } 1985 } return res; 1987 } // Q_atan_UPSIGN*/ 1989 public static Cinterval atan( Cinterval z ) //----- 040912 -- { 1991 RealInterval rez = z.r1, 1993 imz = z.r2; 1995 double irez = rez.lo, 1997 srez = rez.hi, iimz = imz.lo, 1999 simz = imz.hi; 2001 int n = 511; // For possible scaling 2003 RealInterval hxl = new RealInterval(irez); ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 177 RealInterval hxu= new RealInterval(srez); 2005 RealInterval hyl= new RealInterval(iimz); RealInterval hyu= new RealInterval(simz); 2007 double 2009 resxl=0, resxu=0, resyl , resyu; // 2011 // 1st: check for singularities // 2013 if( ( irez <= 0.0 && srez >= 0.0 ) && ( iimz <= -1.0 || simz >= 1.0 ) ) System.out.println("ERRO tan"); 2015 // // 2nd: real part 2017 // Re( atan( z ) ) = Arg( w ) / 2, where w = 1 - x^2 - y^2 + i * 2x ) // 2019 // evaluate atan on vertical boundaries // 2021 RealInterval // y_sqr = sqr( imz ), 2023 // 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; 2025 rew_l , rew_u; 2027 /* ------------------------------ Blomquist --------------------------------------------------- */ /* ---------- Improvements for Im(z) = [1,1] or Im(z) = [-1,-1] ------------------*/ 2029 boolean sqrImz_1 = (iimz==simz) && (iimz==1.0 || iimz==-1.0); // Test for Im(z) = [1,1] or [-1,-1] 2031 if (sqrImz_1) { 2033 rew_l = IAMath.mulEsc(IAMath.abs(hxl),-1); hxl = new RealInterval(Math.signum(irez)); 2035 rew_u = IAMath.mulEsc(IAMath.abs(hxu),-1); hxu = new RealInterval(Math.signum(srez)); 2037 } 2039 else { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 178 2041 int ex,s; double scf; // Scaling factor 2043 RealInterval imz_; int ex1 = (int)Math.getExponent(iimz)+1; 2045 int ex2 = (int)Math.getExponent(simz)+1; if (ex2>ex1) ex1 = ex2; 2047 ex = (int)Math.getExponent(irez)+1; if(ex1>ex) ex = ex1; // Maximum 2049 if (ex>n) { // Scaling necessary s = n - ex - 1; 2051 scf = Math.pow(2, s); // scf: scaling factor 2^s hxl=IAMath.power(hxl,s); // hxl = hxl * 2^s 2053 imz_ = imz; imz_=IAMath.power(imz_ ,s); // imz_ = imz_ * 2^s 2055 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 2057 } else rew_l = IAMath.sub((IAMath.sub(new RealInterval(1) , IAMath.sqr( imz ))) ,IAMath.sqr( hxl )); 2059 ex = (int)Math.getExponent(srez)+1; if(ex1>ex) ex = ex1; // Maximum 2061 if (ex>n) { // Scaling necessary s = n - ex - 1; 2063 scf = Math.pow(2, s); // scf: scaling factor 2^s hxu= IAMath.power(hxu,s); // hxu = hxu * 2^s 2065 imz_ = imz; imz_=IAMath.power(imz_ ,s); // imz_ = imz_ * 2^s 2067 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 2069 } else rew_u = IAMath.sub((IAMath.sub(new RealInterval(1) , IAMath.sqr( imz ))), IAMath.sqr( hxu )); } 2071 /* ------------------------------ Blomquist; 22.02.05; ---------------------------------------- */ 2073 // // left boundary 2075 // ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 179 double rew_inf = rew_l.lo; 2077 double rew_sup = rew_l .hi; resxl=re_vert1( irez , hxl, rew_inf , rew_sup , resxl); 2079 resxu=re_vert2( irez , hxl, rew_inf , rew_sup , resxu ); 2081 // 2083 // right boundary // 2085 rew_inf = rew_u .lo; rew_sup = rew_u .hi; 2087 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 resxu = Math.max( resxu , res_u ); 2095 // // look for extremal values on horizontal boundaries 2097 // since atan( x+iy ) = atan( x-iy ), // intersections can be considered in the upper half plane 2099 // double abs_y_min = IAMath.abs( imz ) .lo; 2101 if( abs_y_min > 1.0 ) 2103 { 2105 RealInterval abs_hyl = new RealInterval( abs_y_min ), 2107 // abs_hxl = sqrt( sqr( abs_hyl ) - 1.0 ); abs_hxl = IAMath.sqrtx2m1(abs_hyl); // Blomquist; 2109 RealInterval aux = IAMath.arctan(IAMath.div(new RealInterval (1),abs_hxl)); if( abs_hxl .hi > irez && abs_hxl .lo < srez ){ 2111 // extremal curve intersects lower boundary of x+i|y| in quadrant I // intersection in Q I or Q IV: update minimum 2113 // resxl = inf( atan( abs_y_min / abs_hxl ) ) / 2.0; 2115 resxl = IAMath.div((IAMath.sub(new RealInterval(Math.PI) , aux)), new RealInterval (2.0) ).lo; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 180 } 2117 else if( - abs_hxl .lo > irez && - abs_hxl .hi < srez ) // extremal curve intersects lower boundary of x+i|y| in quadrant II 2119 // intersection in Q II or Q III: update maximum resxu = IAMath.div(IAMath.sub(aux , new RealInterval(Math. PI)), new RealInterval(2)) .hi; 2121 } 2123 2125 // 3rd: imaginary part // Im( atan( z ) ) = +/- Ln( 1 +/- 4y/( x^2 + (1 -/+ y)^2 ) ) / 4 2127 // // evaluate atan on horizontal boundaries 2129 RealInterval abs_rez = IAMath.abs(rez), 2131 im_atan_l , im_atan_u; 2133 2135 if( iimz < 0.0 ) // im_atan_l = -ln( 1 - 4 * hyl / ( x_sqr + sqr( 1 + hyl ) ) ) / 4.0; 2137 // 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) 2139 else{ 2141 // im_atan_l = ln( 1 + 4 * hyl / ( x_sqr + sqr( 1 - hyl ) ) ) / 4.0; 2143 im_atan_l = (Q_atan_UPSIGN(abs_rez ,hyl) ); // Blomquist 2145 } 2147 //im_atan_l= IAMath.times2pown(im_atan_l ,-2); 2149 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 181 2151 if( simz < 0.0 ) // im_atan_u = -ln( 1 - 4 * hyu / ( x_sqr + sqr( 1 + hyu ) ) ) / 4.0; 2153 // 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 2155 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); // Blomquist 2161 } im_atan_u= IAMath.times2pown(im_atan_u ,-2); 2163 2165 2167 resyl = Math.min( im_atan_l .lo, im_atan_u .lo ); 2169 resyu = Math.max( im_atan_l .hi, im_atan_u .hi ); // 2171 // look for extremal values on vertical boundaries , // if vertical boundaries intersect extremal curves 2173 // double abs_x_min = IAMath.abs( rez ).lo; 2175 RealInterval x_extr = new RealInterval( abs_x_min ), 2177 // y_extr = sqrt( 1.0 + sqr( x_extr ) ); y_extr = IAMath.sqrt1px2(x_extr); // Blomquist; 2179 if( y_extr .lo < simz && y_extr.hi > iimz ){ 2181 // extremal curve intersects left boundary of |x|+iy in quadrant I 2183 // update maximum // resyu = Sup( ln( 1 + 4 * y_extr / ( sqr( x_extr ) + sqr( 1 - y_extr ) ) ) ) / 4.0; 2185 resyu = IAMath.div(Aux_1_atan(abs_x_min), new RealInterval ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 182 (4.0) ).hi; // Blomquist 2187 } if( - y_extr .hi < simz && - y_extr .lo > iimz ){ 2189 // extremal curve intersects left boundary of |x|+iy in quadrant IV // update minimum 2191 // resyl = -Sup( ln( 1 + 4 * y_extr / ( sqr( x_extr ) + sqr( 1 - y_extr ) ) ) ) / 4.0; 2193 resyl = - IAMath.div(Aux_1_atan(abs_x_min), new RealInterval (4.0)).hi; // Blomquist } 2195 return new Cinterval( new RealInterval( resxl , resxu ), new RealInterval( resyl , resyu ) ); 2197 } 2199 // //-- end atan ----------------------------------------------------------------- 2201 2203 //-- acot ----------------------------------------------------------- 040912 -- // 2205 // Analytic inverse cotangent function // acot( z ) = atan( 1/z ) 2207 // The code of acot( z ) is almost identical to the code of atan( z ) // 2209 public static Cinterval acot( Cinterval z ) { 2211 RealInterval rez = z.r1, 2213 imz = z.r2; 2215 double irez = rez.lo, 2217 srez = rez.hi, iimz = imz.lo, ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 183 2219 simz = imz.hi; 2221 int n = 511; // For possible scaling 2223 RealInterval hxl= new RealInterval(irez); RealInterval hxu= new RealInterval(srez); 2225 RealInterval hyl= new RealInterval(iimz); RealInterval hyu= new RealInterval(simz); 2227 2229 double resxl = 0, resxu = 0, resyl , resyu; 2231 // // 1st: check for singularities 2233 // if( ( (irez <= 0.0) && (srez >= 0.0) ) && ( (iimz <= 1.0) && ( simz >= -1.0) ) ) 2235 System.out.println(" ERRO NO ACOT"); // 2237 // 2nd: real part // Re( atan( z ) ) = Arg( w ) / 2, where w = 1 - x^2 - y^2 + i * 2x ) 2239 // Re( atan( 1 / z ) ) = Arg( w ) / 2, where w = x^2 + y^2 - 1 + i * 2x ) // 2241 // evaluate acot on vertical boundaries // 2243 RealInterval // y_sqr = sqr( imz ), 2245 // rew_l = (y_sqr - 1) + sqr(hxl), // rew_u = (y_sqr - 1) + sqr(hxu); 2247 // rew_l = (sqr( hxl )-1) + y_sqr , // rew_u = (sqr( hxu )-1) + y_sqr; 2249 rew_l , rew_u; /* ------------------------------ Blomquist --------------------------------------------------- */ 2251 /* ---------- 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 if (sqrImz_1) { 2255 rew_l = IAMath.abs(hxl); hxl = new RealInterval(Math.signum( ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 184 irez)); rew_u = IAMath.abs(hxu); hxu = new RealInterval(Math.signum( srez)); 2257 } else { 2259 int ex,s; 2261 double scf; // Scaling factor RealInterval imz_; 2263 int ex1 = Math.getExponent(iimz); int ex2 = Math.getExponent( simz); if (ex2>ex1) ex1 = ex2; 2265 ex = Math.getExponent(irez); 2267 if(ex1>ex) ex = ex1; // Maximum if (ex>n) { // Scaling necessary 2269 s = n - ex - 1; scf = Math.pow(2,(s+1) -1); // scf: scaling factor 2^s 2271 hxl=IAMath.times2pown(hxl,s); // hxl = hxl * 2^s imz_ = imz; 2273 imz_=IAMath.times2pown(imz_ ,s); // imz_ = imz_ * 2^s 2275 rew_l = IAMath.add(IAMath.sub(IAMath.sqr(imz_) , new RealInterval(scf)) , IAMath.sqr(hxl)); // here now without overflow!! 2277 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 ex = Math.getExponent(srez)+1; 2281 if(ex1>ex) ex = ex1; // Maximum if (ex>n) { // Scaling necessary 2283 s = n - ex - 1; scf = Math.pow(2,(s+1) -1); // scf: scaling factor 2^s 2285 hxu=IAMath.times2pown(hxu,s); // hxu = hxu * 2^s imz_ = imz; 2287 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!! 2289 ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 185 2291 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 )); 2293 } /* ------------------------------ Blomquist; 22.02.05; ---------------------------------------- */ 2295 // 2297 // left boundary // 2299 double rew_inf = rew_l.lo; double rew_sup = rew_l.hi ; 2301 2303 resxl=re_vert1( irez , hxl, rew_inf , rew_sup , resxl ); resxu=re_vert2( irez , hxl, rew_inf , rew_sup , resxu ); 2305 // // right boundary 2307 // 2309 rew_inf = rew_u.lo; rew_sup = rew_u.hi; 2311 double res_l = 0, res_u = 0; 2313 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 resxl = Math.min( resxl , res_l ); 2317 resxu = Math.max( resxu , res_u ); // 2319 // look for extremal values on horizontal boundaries // since acot( x+iy ) = acot( x-iy ), 2321 // intersections can be considered in the upper half plane // 2323 double abs_y_min = IAMath.abs( imz ) .lo; 2325 if( abs_y_min > 1.0 ) { 2327 RealInterval abs_hyl = new RealInterval( abs_y_min ), 2329 // abs_hxl = sqrt( sqr( abs_hyl ) - 1.0 ); 2331 abs_hxl = IAMath.sqrtx2m1(abs_hyl); // Blomquist; ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 186 2333 if( abs_hxl.hi > irez && abs_hxl.lo < srez ){ // extremal curve intersects lower boundary of x+i|y| in quadrant I 2335 // 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; 2337 }if( (- abs_hxl.lo) > irez && (- abs_hxl.hi) < srez ){ 2339 // extremal curve intersects lower boundary of x+i|y| in quadrant II // intersection in Q II or Q III: update minimum 2341 resxl = - IAMath.div(IAMath.arctan( IAMath.div(new RealInterval (1.0) , abs_hxl) ) , new RealInterval (2.0) ) .hi; 2343 } } 2345 // // 3rd: imaginary part 2347 // Im( atan( z ) ) = +/- Ln( 1 +/- 4y/( x^2 + (1 -/+ y)^2 ) ) / 4 // Im( acot ) = - Im ( atan ): We calculate Im( atan ) and return "-" 2349 // // evaluate atan on horizontal boundaries 2351 // RealInterval 2353 // x_sqr = sqr( rez ), // overflow is avoided by calling Q_atan_UPSIGN (...) im_atan_l , im_atan_u , 2355 abs_rez = IAMath.abs(rez); // Blomquist; if( iimz < 0.0 ){ 2357 // im_atan_l = -ln( 1 - 4 * hyl / ( x_sqr + sqr( 1 + hyl ) ) ) / 4.0; 2359 im_atan_l = IAMath.div(IAMath.mulEsc(Q_atan_UPSIGN(abs_rez , IAMath.mulEsc(hyl ,-1)),-1) , new RealInterval (4.0)); // Blomquist } 2361 else{ ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 187 2363 // 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 2365 im_atan_l.hi= Math.nextUp(im_atan_l.hi); 2367 } if( simz < 0.0 ) 2369 // 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 2371 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 } resyl = Math.min( im_atan_l .lo, im_atan_u.lo ); 2377 resyu = Math.max( im_atan_l.hi , im_atan_u .hi ); // 2379 // look for extremal values on vertical boundaries , // if vertical boundaries intersect extremal curves 2381 // double abs_x_min =IAMath.abs( rez ).lo; 2383 RealInterval x_extr = new RealInterval( abs_x_min ), 2385 // y_extr = sqrt( 1.0 + sqr( x_extr ) ); y_extr = IAMath.sqrt1px2(x_extr); // Blomquist 2387 if( y_extr.lo < simz && y_extr.hi > iimz ) // extremal curve intersects left boundary of |x|+iy in quadrant I 2389 // update maximum // resyu = Sup( ln( 1 + 4 * y_extr / ( sqr( x_extr ) + sqr( 1 - y_extr ) ) ) ) / 4.0; 2391 resyu = IAMath.div(Aux_1_atan(abs_x_min),new RealInterval (4.0)).hi; // Blomquist if( - y_extr.hi < simz && -y_extr.lo > iimz ) 2393 // extremal curve intersects left boundary of |x|+iy in quadrant IV // update minimum ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 188 2395 // 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 2397 resxu= Math.nextUp(resxu); return new Cinterval( new RealInterval( resxl , resxu ), new RealInterval( -resyu , -resyl ) ); 2399 } 2401 // //-- end acot ----------------------------------------------------------------- 2403 2405 //-- atanh ---------------------------------------------------------- 040912 -- 2407 public static Cinterval atanh( Cinterval z ) 2409 // // atanh( z ) = - i * atan( i * z ) 2411 // { 2413 Cinterval res = atan( new Cinterval( IAMath.mulEsc(z.r2,-1), z. r1 ) ); return new Cinterval( res.r2, IAMath.mulEsc(res.r1,-1)) ; 2415 } // 2417 //-- end atanh ---------------------------------------------------------------- 2419 //-- acoth ---------------------------------------------------------- 040912 -- //*/ 2421 public static Cinterval acoth( Cinterval z ) // 2423 // acoth( z ) = i * acot( i * z ) // 2425 { ANEXO D. CÓDIGO FONTE DA CLASSE CINTERVAL 189 Cinterval res = acot( new Cinterval( IAMath.mulEsc(z.r2,-1), z. r1 ) ); 2427 return new Cinterval( IAMath.mulEsc(res.r2,-1), res.r1 ); } 2429 // //-- end acoth ---------------------------------------------------------------- 2431 public static Complex mid( Cinterval z ){ 2433 Complex c= new Complex(’a’); c.a= (float)IAMath.lmidpoint(z.r1); 2435 c.b= (float)IAMath.lmidpoint(z.r2); return c; 2437 } 2439 2441 2443 } 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 ] ]