<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>1405-5546</journal-id>
<journal-title><![CDATA[Computación y Sistemas]]></journal-title>
<abbrev-journal-title><![CDATA[Comp. y Sist.]]></abbrev-journal-title>
<issn>1405-5546</issn>
<publisher>
<publisher-name><![CDATA[Instituto Politécnico Nacional, Centro de Investigación en Computación]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1405-55462023000100079</article-id>
<article-id pub-id-type="doi">10.13053/cys-27-1-4141</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Análisis numérico de atan2() para sistemas embebidos]]></article-title>
<article-title xml:lang="en"><![CDATA[Numerical analysis of atan2() for embedded systems]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Sandoval-Gutiérrez]]></surname>
<given-names><![CDATA[Jacobo]]></given-names>
</name>
<xref ref-type="aff" rid="Aff"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Herrera-Lozada]]></surname>
<given-names><![CDATA[Juan Carlos]]></given-names>
</name>
<xref ref-type="aff" rid="Aff"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Laguna-Sánchez]]></surname>
<given-names><![CDATA[Gerardo Abel]]></given-names>
</name>
<xref ref-type="aff" rid="Aff"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Álvarez-Cedillo]]></surname>
<given-names><![CDATA[Jesús Antonio]]></given-names>
</name>
<xref ref-type="aff" rid="Aff"/>
</contrib>
</contrib-group>
<aff id="Af1">
<institution><![CDATA[,Universidad Autónoma Metropolitana  ]]></institution>
<addr-line><![CDATA[Lerma de Villada ]]></addr-line>
<country>Mexico</country>
</aff>
<aff id="Af2">
<institution><![CDATA[,Instituto Politécnico Nacional  ]]></institution>
<addr-line><![CDATA[Ciudad de México ]]></addr-line>
<country>Mexico</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>03</month>
<year>2023</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>03</month>
<year>2023</year>
</pub-date>
<volume>27</volume>
<numero>1</numero>
<fpage>79</fpage>
<lpage>87</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.mx/scielo.php?script=sci_arttext&amp;pid=S1405-55462023000100079&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.mx/scielo.php?script=sci_abstract&amp;pid=S1405-55462023000100079&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.mx/scielo.php?script=sci_pdf&amp;pid=S1405-55462023000100079&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[Resumen: La función atan2() es utilizada en diferentes áreas del conocimiento, sobre todo mediante el uso de las bibliotecas específicas incluidas con los lenguajes de programación, con las que los usuarios obtienen resultados, más o menos exactos y con cierta precisión, pero sin prestar mayor atención a la cantidad de los recursos computacionales utilizados, a saber, la memoria empleada y la precisión de la unidad lógica-aritmética del procesador. Los usuarios de estas bibliotecas tampoco evalúan otros aspectos relacionados, como lo son el consumo de energía, el espacio utilizado y los costos asociados. Sin embargo, cuando los recursos de cómputo son limitados, como en el caso de los sistemas embebidos, la implementación de toda función matemática requiere de una cierta evaluación de desempeño. En este trabajo se proponen algunas implementaciones para la función atan2(), soportadas por series de Euler y de Maclaurin, realizando la comparacion del desempeño obtenido contra las implemntaciones de referencia, a saber, el empleo de tablas de búsqueda y las implementaciones disponibles en las bibliotecas estándares. En este trabajo se aprovecha la arquitectura de los procesadores ARM, haciendo uso sus interrupciones de tipo hilo y sus operaciones vectorizadas, todo ello con el fin de contar con alternativas de implementación para la función atan2(), a fin de poder aplicarlas en dispositivos portátiles y obtener ventajas significativas al lograr un menor tiempo de arranque, menor espacio ocupado, bajo consumo de energía y bajo costo.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[Abstract: The atan2() function is used in different areas of knowledge, mainly through the use of specific libraries included with programming languages, with which users obtain results, more or less accurate and with a certain precision, but without paying much attention to the amount of computational resources used, namely the memory used and the precision of the logical-arithmetic unit of the processor. Users of these libraries also do not evaluate other related aspects, such as power consumption, space used, and associated costs. However, when computational resources are limited, as in the case of embedded systems, implementing of any mathematical function requires some performance evaluation. In this work, we propose some implementations for the atan2() function, supported by the Euler and Maclaurin series, comparing the performance obtained against the reference implementations, namely the use of lookup tables and the implementations available in the standard libraries. Furthermore, this work takes advantage of the architecture of ARM processors, making use of their threaded interrupts and vectorized operations, all this to have implementation alternatives for the atan2() function to apply them in portable devices and obtain significant advantages by achieving a shorter startup time, less space occupied, low power consumption and low cost.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[atan2()]]></kwd>
<kwd lng="es"><![CDATA[ARM]]></kwd>
<kwd lng="es"><![CDATA[sistemas embebidos]]></kwd>
<kwd lng="en"><![CDATA[atan2()]]></kwd>
<kwd lng="en"><![CDATA[ARM]]></kwd>
<kwd lng="en"><![CDATA[embedded systems]]></kwd>
</kwd-group>
</article-meta>
</front><back>
<ref-list>
<ref id="B1">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Agarwal]]></surname>
<given-names><![CDATA[R. C.]]></given-names>
</name>
<name>
<surname><![CDATA[Cooley]]></surname>
<given-names><![CDATA[J. W.]]></given-names>
</name>
<name>
<surname><![CDATA[Gustavson]]></surname>
<given-names><![CDATA[F. G.]]></given-names>
</name>
<name>
<surname><![CDATA[Shearer]]></surname>
<given-names><![CDATA[J. B.]]></given-names>
</name>
<name>
<surname><![CDATA[Slishman]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
<name>
<surname><![CDATA[Tuckerman]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[New scalar and vector elementary functions for the ibm system/370]]></article-title>
<source><![CDATA[IBM Journal of Research and Development]]></source>
<year>1986</year>
<volume>30</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>126-44</page-range></nlm-citation>
</ref>
<ref id="B2">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Andraka]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[A survey of CORDIC algorithms for fpga based computers]]></source>
<year>1998</year>
<conf-name><![CDATA[ ACM/SIGDA Sixth International Symposium on Field Programmable Gate Arrays]]></conf-name>
<conf-date>1998</conf-date>
<conf-loc> </conf-loc>
<page-range>191-200</page-range></nlm-citation>
</ref>
<ref id="B3">
<nlm-citation citation-type="book">
<collab>Android</collab>
<source><![CDATA[Strictmath]]></source>
<year>2022</year>
<publisher-name><![CDATA[android developers]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<nlm-citation citation-type="">
<collab>ARM</collab>
<source><![CDATA[C251 user&#8217;s guide: atan2 library routine]]></source>
<year>2022</year>
</nlm-citation>
</ref>
<ref id="B5">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Benammar]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Alassi]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Gastli]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Ben-Brahim]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
<name>
<surname><![CDATA[Touati]]></surname>
<given-names><![CDATA[F.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[New fast arctangent approximation algorithm for generic real-time embedded applications]]></article-title>
<source><![CDATA[Sensors]]></source>
<year>2019</year>
<volume>19</volume>
<numero>23</numero>
<issue>23</issue>
</nlm-citation>
</ref>
<ref id="B6">
<nlm-citation citation-type="">
<collab>C++</collab>
<source><![CDATA[std::atan2, std::atan2f, std::atan2l]]></source>
<year>2022</year>
</nlm-citation>
</ref>
<ref id="B7">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fons]]></surname>
<given-names><![CDATA[F.]]></given-names>
</name>
<name>
<surname><![CDATA[Fons]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Cantó]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
<name>
<surname><![CDATA[López]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[Trigonometric computing embedded in a dynamically reconfigurable CORDIC system-on-chip]]></article-title>
<source><![CDATA[Reconfigurable Computing: Architectures and Applications]]></source>
<year>2006</year>
<page-range>122-7</page-range></nlm-citation>
</ref>
<ref id="B8">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Guntoro]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Zipf]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
<name>
<surname><![CDATA[Soffke]]></surname>
<given-names><![CDATA[O.]]></given-names>
</name>
<name>
<surname><![CDATA[Klingbeil]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[Kumm]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Glesner]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[Implementation of realtime and highspeed phase detector on fpga]]></article-title>
<source><![CDATA[Reconfigurable Computing: Architectures and Applications]]></source>
<year>2006</year>
<page-range>1-11</page-range></nlm-citation>
</ref>
<ref id="B9">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gutiérrez]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Torres]]></surname>
<given-names><![CDATA[V.]]></given-names>
</name>
<name>
<surname><![CDATA[Valls]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[Fpga-implementation of atan(y/x) based on logarithmic transformation and lut-based techniques]]></article-title>
<source><![CDATA[Journal of Systems Architecture]]></source>
<year>2010</year>
<volume>56</volume>
<numero>11</numero>
<issue>11</issue>
<page-range>588-96</page-range></nlm-citation>
</ref>
<ref id="B10">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gutiérrez]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Valls]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Implementation on fpga of a lut-based atan(y/x) operator suitable for synchronization algorithms]]></source>
<year>2007</year>
<conf-name><![CDATA[ International Conference on Field Programmable Logic and Applications]]></conf-name>
<conf-date>2007</conf-date>
<conf-loc> </conf-loc>
<page-range>472-5</page-range></nlm-citation>
</ref>
<ref id="B11">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gutiérrez]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Valls]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[Low-power fpga-implementation of atan(y/x) using look-up table methods for communication applications]]></article-title>
<source><![CDATA[J. Signal Process. Syst.]]></source>
<year>2009</year>
<volume>56</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>25-33</page-range></nlm-citation>
</ref>
<ref id="B12">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Husken]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[IeeeCC754++ - an advanced set of tools to check IEEE 754-2008 conformity]]></source>
<year>2022</year>
</nlm-citation>
</ref>
<ref id="B13">
<nlm-citation citation-type="">
<collab>iOS</collab>
<source><![CDATA[Mac os x manual page for atan2(3)]]></source>
<year>2022</year>
</nlm-citation>
</ref>
<ref id="B14">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kandeepan]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Hashmi]]></surname>
<given-names><![CDATA[O.]]></given-names>
</name>
<name>
<surname><![CDATA[Zheng]]></surname>
<given-names><![CDATA[Q.]]></given-names>
</name>
</person-group>
<source><![CDATA[A complex-envelope based digital phase locked loop with an arctan phase detector implemented on fpga and performance analysis]]></source>
<year>2007</year>
<conf-name><![CDATA[ 6th International Conference on Information, Communications and Signal Processing]]></conf-name>
<conf-loc> </conf-loc>
<page-range>1-5</page-range></nlm-citation>
</ref>
<ref id="B15">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kung]]></surname>
<given-names><![CDATA[Y.-S.]]></given-names>
</name>
<name>
<surname><![CDATA[Chen]]></surname>
<given-names><![CDATA[C.-S.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[FPGA-realization of a motion control IC for robot manipulator]]></article-title>
<source><![CDATA[Robot Manipulators]]></source>
<year>2008</year>
</nlm-citation>
</ref>
<ref id="B16">
<nlm-citation citation-type="">
<collab>Matlab</collab>
<source><![CDATA[Four-quadrant inverse tangent -matlab atan2]]></source>
<year>2022</year>
</nlm-citation>
</ref>
<ref id="B17">
<nlm-citation citation-type="book">
<collab>Microsoft</collab>
<source><![CDATA[Mathf.atan2(single, single) method (system)]]></source>
<year>2022</year>
<publisher-name><![CDATA[microsoft docs]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B18">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Moritsugu]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Matsumoto]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[A note on the numerical evaluation of arctangent function]]></article-title>
<source><![CDATA[SIGSAM Bull.]]></source>
<year>1989</year>
<volume>23</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>8-12</page-range></nlm-citation>
</ref>
<ref id="B19">
<nlm-citation citation-type="book">
<collab>Mozilla</collab>
<source><![CDATA[Math.atan2() - javascript]]></source>
<year>2022</year>
<publisher-name><![CDATA[mdn]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B20">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Patton]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[From start to finish: A product development roadmap for sitara&#8482; processors]]></source>
<year>2022</year>
</nlm-citation>
</ref>
<ref id="B21">
<nlm-citation citation-type="">
<collab>Php</collab>
<source><![CDATA[Arc tangent of two variables]]></source>
<year>2022</year>
</nlm-citation>
</ref>
<ref id="B22">
<nlm-citation citation-type="">
<collab>TM4</collab>
<source><![CDATA[Tiva c series tm4c123g launchpad evaluation board users guide]]></source>
<year>2013</year>
</nlm-citation>
</ref>
<ref id="B23">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Torres]]></surname>
<given-names><![CDATA[V.]]></given-names>
</name>
<name>
<surname><![CDATA[Valls]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Lyons]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[Fast-and low-complexity atan2(a,b) approximation [tips and tricks]]]></article-title>
<source><![CDATA[IEEE Signal Processing Magazine]]></source>
<year>2017</year>
<volume>34</volume>
<numero>6</numero>
<issue>6</issue>
<page-range>164-9</page-range></nlm-citation>
</ref>
<ref id="B24">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ukil]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Shah]]></surname>
<given-names><![CDATA[V. H.]]></given-names>
</name>
<name>
<surname><![CDATA[Deck]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
</person-group>
<source><![CDATA[Fast computation of arctangent functions for embedded applications: A comparative analysis]]></source>
<year>2011</year>
<conf-name><![CDATA[ IEEE International Symposium on Industrial Electronics]]></conf-name>
<conf-loc> </conf-loc>
<page-range>1206-11</page-range></nlm-citation>
</ref>
<ref id="B25">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Watanabe]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Sofko]]></surname>
<given-names><![CDATA[G. J.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[Role of interchange reconnection in convection at small interplanetary magnetic field clock angles and in transpolar arc motion]]></article-title>
<source><![CDATA[Journal of Geophysical Research: Space Physics]]></source>
<year>2009</year>
<volume>114</volume>
<numero>1</numero>
<issue>1</issue>
</nlm-citation>
</ref>
<ref id="B26">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Yoshikawa]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<article-title xml:lang=""><![CDATA[Appendix 1 function atan2]]></article-title>
<source><![CDATA[Foundations of Robotics: Analysis and Control]]></source>
<year>2003</year>
<publisher-name><![CDATA[The MIT Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B27">
<nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Zein-Sabatto]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Bodruzzaman]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Kuschewski]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Biologically motivated servomechanism kinematic models]]></source>
<year>1995</year>
<conf-name><![CDATA[ IEEE Southeastcon &#8217;95. Visualize the Future]]></conf-name>
<conf-loc> </conf-loc>
<page-range>165-8</page-range></nlm-citation>
</ref>
</ref-list>
</back>
</article>
