+
CMATH Esta página describe los siguientes productos: CMATH para Visual C ++ CMATH para C ++ Builder (anteriormente Borland C ++) CMATH para Delphi Contenido 1. Introducción CMATH es una biblioteca completa para la aritmética de números complejos y las matemáticas, tanto en coordenadas cartesianas y en coordenadas polares, por los compiladores de C / C ++ y Pascal / Delphi. CMATH está disponible como un producto independiente. También se incluye en el paquete OptiVec. Todas las funciones pueden, alternativamente, pueden llamar desde C clásico y Pascal / Delphi con los nombres de funciones específicas del tipo, o de C ++ y Delphi con nombres y función de los operadores sobrecargados (como sin exp sqrt operador + (como cf_sin cd_exp pe_sqrt..)...; operadores sólo en C ++). En la medida de lo posible, todas las funciones tienen los mismos nombres en la versión Pascal / Delphi como en el / C versión C ++. mayor velocidad, precisión y seguridad se logran a través de la implementación en lenguaje ensamblador (en comparación con el código compilado o en línea de C compleja disponibles bibliotecas de clases ++). Sólo para las tareas más simples, alternativa línea C ++ funciones se utilizan en la versión de C ++. En cuanto al ámbito de aplicación de CMATH se superpone con las implementaciones de clase complejas de Visual C ++, C ++ Builder (anteriormente Borland C ++), y Delphi, CMATH es un reemplazo de alta calidad para estos últimos, que son todos bastante ineficiente e inexacta. fórmulas de libros de texto de la mayoría de otras bibliotecas complejas disponibles (incluyendo los que vienen con Visual C ++ y los compiladores de Borland), la aplicación de CMATH se guió por las siguientes reglas en contraste con el desplegable escrito y compilado: Sin ningún tipo de compromiso, la prioridad se da siempre que el resultado matemáticamente correcto, con la precisión exigida para el respectivo tipo de datos. Especialmente para funciones complejas, esto requiere un tratamiento muy cuidadoso de muchas situaciones diferentes. Con este fin, los diferentes casos tienen que ser distinguido con cuidado pedante. (Fórmulas de libros de texto no es necesario para tratar estas situaciones por separado, ya que en teoría se supone una precisión infinita de resultados intermedios; una implementación real, sin embargo, tiene que trabajar con la precisión limitada dada por los procesadores de la vida real.) Las funciones matemáticas deben ser "seguro" en todas las circunstancias. Ellos pueden, por ninguna razón, simplemente estrellarse, sino que tienen que realizar un tratamiento de error decente. Esto es cierto incluso - y quizás especialmente - para los argumentos aparentemente sin sentido, con la única excepción de la CNI que no son los números y Nan, que se producen a sí mismos sólo como consecuencia de errores graves en otras funciones. Por todos los medios posibles, mayor velocidad de ejecución debe ser alcanzada. (Después de todo, usted no compró su computadora rápida para nada!) El código de programa tiene que ser lo más compacto posible. Sin embargo, en caso de conflicto, la velocidad de ejecución más rápido se da siempre prioridad sobre el tamaño de código más pequeño. 1.1 C / C ++ Específicos Los complejos C ++ es de clase C y la estructura s fComplex etc son binarios compatibles entre sí. Este punto puede llegar a ser importante para grandes proyectos con módulos de C ++ C mixta y. Vigente código C ++ que utiliza la biblioteca de clases compleja, que figura en el ahora denota las clases complejas en coordenadas polares. He aquí una descripción detallada de cómo utilizar CMATH en sus proyectos: En los módulos de C ++, declarar # include. Los tipos de datos fComplex. dComplex. eComplex. fPolar. dPolar. y ePolar se definen como sinónimos de estas clases. Con el fin de evitar la letra (que ya es usado en exceso por mucho tiempo y sin signo de largo. La palabra extendida se usa como sinónimo de doble largo en la versión de Borland C ++ de CMATH. En la versión MSVC, es sinónimo de doble. como MSVC no es compatible con 80 bits reales IEEE. En consecuencia, los tipos de datos complejos de precisión extendida se nombran eComplex y ePolar. Si prefiere tener el. En este caso, sólo el complejo de clase se define y obtiene el sinónimo dComplex. Aquí usted no tiene acceso a las funciones de números complejos de flotador y de precisión extendida, y todas las funciones en coordenadas polares está disponible también. Para los módulos de llanura-C, no se puede incluir Como se describió anteriormente, el tipo de datos extendida se usa como sinónimo de largo (versión Embarcadero / Borland C ++) doble o doble (versión MSVC). Las partes constituyentes de las clases C ++ son declarados como públicos. Ellos se nombran en las clases polares. Esto permite acceder a ellos como z. Re, z. Im, p. Mag. o p. Arg en módulos de C ++, así como en módulos de llanura-C. Para aplicaciones críticas en el tiempo, se recomienda utilizar el C en lugar de la versión C ++ de CMATH, como los compiladores de C / C ++ manejan estructura es mucho más eficiente que es de clase. Para utilizar la versión C con sus módulos de C ++, tenga en cuenta los siguientes puntos: incluir para la inicialización, asignar las partes real / imaginario o Mag / Arg directamente (por ejemplo z. Re = 3; z. Im = 5;) o utilizar las funciones fcplx. dcplx, ecplx, fpolr. dpolr, epolr. El complejo constructores (), fComplex (), polar (), fPolar (). etc., no están disponibles. si lo hace un C ++ compilar en módulos con incluido, usted tiene la posibilidad de elegir entre llamar a funciones CMATH por sus nombres específicos de tipo (como cf_sin. cd_exp), o por sus nombres de C ++ sobrecarga (por ejemplo el pecado. exp). En algunas ocasiones, es posible que se ven obligados a utilizar los nombres de tipos específicos con el fin de resolver las ambigüedades. 1.2 Delphi Específicos CMATH para Delphi define seis tipos de datos complejos: Tipo de registro fComplex = Re, IM: Individual; fin ; escriba dComplex = Registro de Re, Im: doble; fin ; escriba eComplex = Registro de Re, Im: extendido; fin ; escriba fPolar = Registro de Mag, Arg: Float; fin ; escriba dPolar = Registro de Mag, Arg: doble; fin ; escriba ePolar = Registro de Mag, Arg: extendido; fin ; La razón por la cual el tipo de precisión simple obtiene el nombre fComplex en lugar de sComplex es que la carta ya está sobre-utilizado por ShortInt y SmallInt en Pascal / Delphi. Por lo tanto, este nombre se deriva de la / C ++ de análogo C Individual. que es flotador. Los tipos de datos CMATH-Delphi son binarios compatibles con los de las versiones C / C ++. Los nombres de las funciones específicas del tipo son los mismos que en la versión plain-C. La sintaxis, sin embargo, es algo diferente, como C es compatible con los números complejos (que se define como struct s) como valores de retorno, mientras que Pascal y las primeras versiones de Delphi originalmente no permitían registro s para ser devuelto por una función (esto sólo se permite en Delphi) . Por lo tanto, se pasan como argumentos var a las funciones complejas, por ejemplo, cf_sin procedimiento (zy var: fComplex; ZX: fComplex); Los nombres de función sobrecargados son los mismos que en la versión de la C ++. En este caso, los resultados son tratados como verdaderos valores de retorno, por ejemplo función seno (ZX: fComplex): fComplex; 2. Visión general de las funciones de CMATH En lo que sigue, a menudo es sólo la versión fComplex o fPolar de una función que se menciona de forma explícita. Las versiones para dComplex / dPolar. y eComplex / ePolar son siempre exactamente análogo. Todas las funciones para las lenguas C y Pascal / Delphi tienen un prefijo que indica el tipo de datos en la que trabaja la función: denotar funciones extendidas de precisión. En C ++ y Delphi, los sinónimos se definen para todas estas funciones. Los sinónimos no tienen un prefijo, ya que la información de tipo de datos se maneja de manera implícita por el compilador. Los nombres de función sobrecargados son en su mayoría idénticos a los encontrados en las bibliotecas de clases complejas (si la función respectiva existe allí). Tenga en cuenta, sin embargo, que la función de miembro polar tuvo que ser sustituido por magargtoc. como su nombre está ahora reservado a las clases polares. C ++ solamente: Si desea utilizar los nombres de las funciones en C ++ los módulos C, asegúrese de incluir. 2.1. La inicialización de los números complejos En lo que sigue, denotamos los complejos clases por los nombres abreviados, fComplex. fPolar. En C ++, etc., siempre se puede utilizar la nomenclatura plantilla en lugar, la escritura está escrito aquí, y así sucesivamente para todos los demás tipos complejos y clases. Los números complejos se inicializan mediante la asignación de un valor por separado a las partes imaginarias y reales, por ejemplo, z. Re = 3,0; z. Im = 5,7; p. Mag = 8,8; p. Arg = 3,14; (Por supuesto, para Pascal / Delphi, el operador de asignación está escrito Para los números complejos de doble precisión, el uso dcplx y dpolr. para los números complejos extendida precisión, el uso ecplx y epolr. 2.2. Las interconversiones datos de tipo Interconversiones entre los diversos tipos complejos se realizan a través de las funciones: arriba-abajo o conversión de precisión dentro de los tipos cartesianas complejo conversión de polar en complejo cartesiano condiciones de desbordamiento en el curso de abajo-conversiones se manejan en silencio configurando el resultado al valor más grande posible. Para los módulos de C ++, hay varios constructores sobrecargados como una alternativa a las funciones anteriores: formas básicas: fComplex fComplex (Repart flotar, flotar imparto = 0); fComplex fComplex (dComplex); fComplex fComplex (eComplex); fPolar fPolar (MagPart flotar, flotar ArgPart = 0); fPolar fPolar (dPolar); fPolar fPolar (ePolar); cartesiano interconversión De manera similar a la de constructores fComplex () y fPolar (). también dComplex (). dPolar (). eComplex. y ePolar () existe en versiones sobrecargadas que realizan las mismas tareas para las clases dComplex. dPolar. eComplex. y ePolar. respectivamente. Como se mencionó anteriormente, condiciones de desbordamiento en el curso de abajo-conversiones se manejan en silencio configurando el resultado al valor más grande posible. Un constructor especial para los números polares es pf_principal fPolar (fPolar __p); y, para C ++ solamente, su forma sobrecargada de dos números reales de las entradas principales separadas fPolar (Mag flotar, flotar Arg); Estas funciones reducen la entrada a la gama Arg - p = p + se llama el valor principal. Tenga en cuenta que estas son las únicas funciones polares, reduciendo la salida al valor principal. Todos los otros aceptan y argumentos cuyos ángulos pueden quedar fuera de este rango de retorno. La conversión entre el formato cartesiano y polar implica funciones transcedental y es, por lo tanto, bastante tiempo. Es cierto que las multiplicaciones son más rápidos en coordenadas polares, mientras que las adiciones son mucho más rápidos en cartesiano. La diferencia, sin embargo, es mucho menor que el coste de cambiar de ida y vuelta entre las diferentes representaciones, que nosotros recomendamos quedarse en general, con el formato cartesiano. Sólo en los siguientes casos, la conversión realmente tiene sentido: Tiene sólo multiplicaciones y funciones matemáticas relacionadas (como cuadrado. Sqrt. Ipow). Entonces, usted debe comenzar con coordenadas polares. Tienes que llamar a la función exponencial compleja. En este caso, cf_exptop te haya introducido en coordenadas polares de una manera muy natural. Usted está en coordenadas polares y tienen que calcular el logaritmo. En este caso, pf_logtoc (o similarmente pf_log2toc. Pf_log10toc) que lleva a la representación cartesiana. 2.3 Operaciones básicas complejas Las siguientes operaciones complejas básicas se definen en CMATH. cartesiano C / Pascal función / Delphi C polar / Pascal función / Delphi 2.4 Operaciones aritméticas Sólo C ++ y Delphi de la versión de 2006, sobre: El siguiente conjunto de operadores está disponible para todas las tres clases complejas cartesianas: + - * / + = - = * = / = == = Para las clases complejas polares, tenemos: * / * = / = ==! = Estos operadores existen también para los argumentos, en los que un argumento es complejo, y el otro real y donde los argumentos son de diferentes precisiones de punto flotante. Además, las siguientes funciones sobrecargadas se pueden utilizar para las operaciones aritméticas: añadir sub división mul Trabajan para dos argumentos complejos o para un complejo y un argumento real. Además, todas las operaciones aritméticas de los números complejos se implementan como funciones que en realidad ofrecen la implementación más eficiente: Como se señaló anteriormente, las funciones exponenciales y logaritmos proporcionan una transición natural entre coordenadas cartesianas y polares. Si bien hay exp y registro de funciones para fComplex como argumento y como valor de retorno, cf_exptop toma un argumento y devuelve fComplex fPolar. En la dirección opuesta, pf_logtoc toma un argumento fPolar y devuelve fComplex. 3. Manipulación de error 3.1 Tratamiento de errores general de funciones complejas El manejo de errores de las funciones complejas sigue las reglas empleadas en general, también para las funciones y operaciones con números reales. Para todas las operaciones aritméticas, el diseño de los algoritmos elimina el peligro de un fallo debido a resultados intermedios irregulares. Desbordando o de otra manera los resultados finales irregulares, sin embargo, dará lugar a una interrupción de hardware que se genera y, en consecuencia, a un aborto de programa. En contraste con las operaciones aritméticas, todas las funciones matemáticas realizan una comprobación de errores apretado. Todos los mensajes de error generados finalmente utilizar el nombre C / Pascal (en lugar de la C ++ / nombre Delphi sobrecargado) de la función falla. 3.1.1 C / C ++ Específicos Todas las condiciones de error en las funciones matemáticas CMATH se manejan de la manera pasada de moda, pero más flexible y eficiente a través de _matherr (para funciones fComplex y dComplex) y _matherrl (para funciones eComplex; 32 bits Borland C ++ solamente). El Mag Re o parte del argumento complejo, causando un error se almacena en el e-Y. 3.1.2 Pascal / Delphi Específicos Cómo CMATH controla los errores de punto flotante en las funciones matemáticas complejas se define por una llamada a V_setFPErrorHandling. Un número de constantes predefinidas fperrXXX está disponible para la construcción del modo de control de errores deseada: Igual que fperrAbortDOMAIN o fperrNoteSING o fperrNoteOVERFLOW Ejemplo: V_setFPErrorHandling (fperrAbortDOMAIN + fperrAbortSING + fperrAbortOVERFLOW + fperrNoteTLOSS); En este ejemplo, la ejecución del programa se abortará (con el mensaje apropiado) en el caso de los errores más graves, dominio y SING. En el caso de errores de desbordamiento y TLOSS, se mostrará una advertencia, pero la ejecución del programa se continuará con resultados predeterminados establecidos por las respectivas funciones, donde se producen los errores. La aparición repetida del mismo tipo de error dentro de una y la misma función dará lugar a un único mensaje que se genera. errores ulteriores serán tratadas en silencio. 3.2 Mensajes de error de escritura en un archivo El V_setErrorEventFile función proporciona un medio para decidir si desea que sus mensajes de error que aparezca en la pantalla y / o en un archivo de registro. Esta función necesita como argumentos el nombre deseado para el archivo de eventos y un interruptor llamado ScreenAndFile que decide si desea que los mensajes de error impresos simultáneamente en el archivo y en la pantalla (ScreenAndFile = TRUE (no nulo)) o exclusivamente en el archivo (ScreenAndFile = FALSO (0)). 4. Referencia de sintaxis A excepción de las funciones de conversión de tipo de datos, sólo se da el flotador / sintaxis fComplex / fPolar. La sintaxis de las funciones para las precisiones dobles y extendidos es exactamente análogo. Si ha elegido el complejo de clase, ni hacer cualquiera de los operadores de tipo de fundición y existen funciones de interconversión, si hay un solo tipo. 4.1 Llanura-C, Pascal / Delphi Funciones Para las funciones de doble / dComplex / dPolar y precisión extendida / eComplex / ePolar, los prefijos son cd_, PD_, ce_. y pe_. respectivamente.
No comments:
Post a Comment