CINXE.COM

Complex and Rational Numbers — Julia Language 0.3.13-pre documentation

<!DOCTYPE html><HTML class="no-js" lang="en"><head><meta charset="utf-8"/><meta content="width=device-width, initial-scale=1.0" name="viewport"/><meta content="noindex" name="robots"/><title>Complex and Rational Numbers — Julia Language 0.3.13-pre documentation</title><link href="https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700" rel="stylesheet" type="text/css"/><link href="../../_static/julia.css" rel="stylesheet" type="text/css"/><link href="../../_static/julia.css" rel="stylesheet" type="text/css"/><link href="../../" rel="top" title="Julia Language 0.3.13-pre documentation"/><link href="../strings/" rel="next" title="Strings"/><link href="../mathematical-operations/" rel="prev" title="Mathematical Operations and Elementary Functions"/><script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script><script data-outdated-warner="">function maybeAddWarning () { const head = document.getElementsByTagName('head')[0]; // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. if (document.body.querySelector('meta[name="robots"]') === null) { const meta = document.createElement('meta'); meta.name = 'robots'; meta.content = 'noindex'; head.appendChild(meta); }; // Add a stylesheet to avoid inline styling const style = document.createElement('style'); style.type = 'text/css'; style.appendChild(document.createTextNode('.outdated-warning-overlay { position: fixed; top: 0; left: 0; right: 0; box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); z-index: 999; background-color: #ffaba7; color: rgba(0, 0, 0, 0.7); border-bottom: 3px solid #da0b00; padding: 10px 35px; text-align: center; font-size: 15px; } .outdated-warning-overlay .outdated-warning-closer { position: absolute; top: calc(50% - 10px); right: 18px; cursor: pointer; width: 12px; } .outdated-warning-overlay a { color: #2e63b8; } .outdated-warning-overlay a:hover { color: #363636; }')); head.appendChild(style); const div = document.createElement('div'); div.classList.add('outdated-warning-overlay'); const closer = document.createElement('div'); closer.classList.add('outdated-warning-closer'); // Icon by font-awesome (license: https://fontawesome.com/license, link: https://fontawesome.com/icons/times?style=solid) closer.innerHTML = '<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="times" class="svg-inline--fa fa-times fa-w-11" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg>'; closer.addEventListener('click', function () { document.body.removeChild(div); }); let href = '/'; if (window.documenterBaseURL) { href = window.documenterBaseURL + '/../'; } div.innerHTML = 'This is an old version of the documentation. <br> <a href="' + href + '">Go to the newest version</a>.'; div.appendChild(closer); document.body.appendChild(div); }; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', maybeAddWarning); } else { maybeAddWarning(); }; </script></head><body class="wy-body-for-nav" role="document"><div class="wy-grid-for-nav"><nav class="wy-nav-side" data-toggle="wy-nav-shift"><div class="wy-side-nav-search"><a href="http://julialang.org/"><img class="logo" src="../../_static/julia-logo.svg"/></a><div role="search"><form action="../../search/" class="wy-form" id="rtd-search-form" method="get"><input name="q" placeholder="Search docs" type="text"/><input name="check_keywords" type="hidden" value="yes"/><input name="area" type="hidden" value="default"/></form></div></div><div aria-label="main navigation" class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation"><ul class="current"><li class="toctree-l1"><a class="reference internal" href="../introduction/">Introduction</a></li><li class="toctree-l1"><a class="reference internal" href="../getting-started/">Getting Started</a><ul><li class="toctree-l2"><a class="reference internal" href="../getting-started/#resources">Resources</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../variables/">Variables</a><ul><li class="toctree-l2"><a class="reference internal" href="../variables/#allowed-variable-names">Allowed Variable Names</a></li><li class="toctree-l2"><a class="reference internal" href="../variables/#stylistic-conventions">Stylistic Conventions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../integers-and-floating-point-numbers/">Integers and Floating-Point Numbers</a><ul><li class="toctree-l2"><a class="reference internal" href="../integers-and-floating-point-numbers/#integers">Integers</a></li><li class="toctree-l2"><a class="reference internal" href="../integers-and-floating-point-numbers/#floating-point-numbers">Floating-Point Numbers</a></li><li class="toctree-l2"><a class="reference internal" href="../integers-and-floating-point-numbers/#arbitrary-precision-arithmetic">Arbitrary Precision Arithmetic</a></li><li class="toctree-l2"><a class="reference internal" href="../integers-and-floating-point-numbers/#numeric-literal-coefficients">Numeric Literal Coefficients</a></li><li class="toctree-l2"><a class="reference internal" href="../integers-and-floating-point-numbers/#literal-zero-and-one">Literal zero and one</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../mathematical-operations/">Mathematical Operations and Elementary Functions</a><ul><li class="toctree-l2"><a class="reference internal" href="../mathematical-operations/#arithmetic-operators">Arithmetic Operators</a></li><li class="toctree-l2"><a class="reference internal" href="../mathematical-operations/#bitwise-operators">Bitwise Operators</a></li><li class="toctree-l2"><a class="reference internal" href="../mathematical-operations/#updating-operators">Updating operators</a></li><li class="toctree-l2"><a class="reference internal" href="../mathematical-operations/#numeric-comparisons">Numeric Comparisons</a></li><li class="toctree-l2"><a class="reference internal" href="../mathematical-operations/#elementary-functions">Elementary Functions</a></li></ul></li><li class="toctree-l1 current"><a class="current reference internal" href="">Complex and Rational Numbers</a><ul><li class="toctree-l2"><a class="reference internal" href="#complex-numbers">Complex Numbers</a></li><li class="toctree-l2"><a class="reference internal" href="#rational-numbers">Rational Numbers</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../strings/">Strings</a><ul><li class="toctree-l2"><a class="reference internal" href="../strings/#characters">Characters</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#string-basics"><tt class="docutils literal"><span class="pre">String</span></tt> Basics</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#unicode-and-utf-8">Unicode and UTF-8</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#interpolation">Interpolation</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#common-operations">Common Operations</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#non-standard-string-literals">Non-Standard String Literals</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#regular-expressions">Regular Expressions</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#id3">Byte Array Literals</a></li><li class="toctree-l2"><a class="reference internal" href="../strings/#version-number-literals">Version Number Literals</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../functions/">Functions</a><ul><li class="toctree-l2"><a class="reference internal" href="../functions/#argument-passing-behavior">Argument Passing Behavior</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#the-return-keyword">The <tt class="docutils literal"><span class="pre">return</span></tt> Keyword</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#id1">Operators Are Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#operators-with-special-names">Operators With Special Names</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#anonymous-functions">Anonymous Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#multiple-return-values">Multiple Return Values</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#varargs-functions">Varargs Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#optional-arguments">Optional Arguments</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#keyword-arguments">Keyword Arguments</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#evaluation-scope-of-default-values">Evaluation Scope of Default Values</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#do-block-syntax-for-function-arguments">Do-Block Syntax for Function Arguments</a></li><li class="toctree-l2"><a class="reference internal" href="../functions/#further-reading">Further Reading</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../control-flow/">Control Flow</a><ul><li class="toctree-l2"><a class="reference internal" href="../control-flow/#compound-expressions">Compound Expressions</a></li><li class="toctree-l2"><a class="reference internal" href="../control-flow/#conditional-evaluation">Conditional Evaluation</a></li><li class="toctree-l2"><a class="reference internal" href="../control-flow/#short-circuit-evaluation">Short-Circuit Evaluation</a></li><li class="toctree-l2"><a class="reference internal" href="../control-flow/#repeated-evaluation-loops">Repeated Evaluation: Loops</a></li><li class="toctree-l2"><a class="reference internal" href="../control-flow/#exception-handling">Exception Handling</a></li><li class="toctree-l2"><a class="reference internal" href="../control-flow/#tasks-aka-coroutines">Tasks (aka Coroutines)</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../variables-and-scoping/">Scope of Variables</a><ul><li class="toctree-l2"><a class="reference internal" href="../variables-and-scoping/#for-loops-and-comprehensions">For Loops and Comprehensions</a></li><li class="toctree-l2"><a class="reference internal" href="../variables-and-scoping/#constants">Constants</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../types/">Types</a><ul><li class="toctree-l2"><a class="reference internal" href="../types/#type-declarations">Type Declarations</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#abstract-types">Abstract Types</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#bits-types">Bits Types</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#composite-types">Composite Types</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#immutable-composite-types">Immutable Composite Types</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#declared-types">Declared Types</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#tuple-types">Tuple Types</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#type-unions">Type Unions</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#man-parametric-types">Parametric Types</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#type-aliases">Type Aliases</a></li><li class="toctree-l2"><a class="reference internal" href="../types/#operations-on-types">Operations on Types</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../methods/">Methods</a><ul><li class="toctree-l2"><a class="reference internal" href="../methods/#defining-methods">Defining Methods</a></li><li class="toctree-l2"><a class="reference internal" href="../methods/#method-ambiguities">Method Ambiguities</a></li><li class="toctree-l2"><a class="reference internal" href="../methods/#parametric-methods">Parametric Methods</a></li><li class="toctree-l2"><a class="reference internal" href="../methods/#note-on-optional-and-keyword-arguments">Note on Optional and keyword Arguments</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../constructors/">Constructors</a><ul><li class="toctree-l2"><a class="reference internal" href="../constructors/#outer-constructor-methods">Outer Constructor Methods</a></li><li class="toctree-l2"><a class="reference internal" href="../constructors/#inner-constructor-methods">Inner Constructor Methods</a></li><li class="toctree-l2"><a class="reference internal" href="../constructors/#incomplete-initialization">Incomplete Initialization</a></li><li class="toctree-l2"><a class="reference internal" href="../constructors/#parametric-constructors">Parametric Constructors</a></li><li class="toctree-l2"><a class="reference internal" href="../constructors/#case-study-rational">Case Study: Rational</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../conversion-and-promotion/">Conversion and Promotion</a><ul><li class="toctree-l2"><a class="reference internal" href="../conversion-and-promotion/#conversion">Conversion</a></li><li class="toctree-l2"><a class="reference internal" href="../conversion-and-promotion/#promotion">Promotion</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../modules/">Modules</a><ul><li class="toctree-l2"><a class="reference internal" href="../modules/#summary-of-module-usage">Summary of module usage</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../metaprogramming/">Metaprogramming</a><ul><li class="toctree-l2"><a class="reference internal" href="../metaprogramming/#program-representation">Program representation</a></li><li class="toctree-l2"><a class="reference internal" href="../metaprogramming/#expressions-and-evaluation">Expressions and evaluation</a></li><li class="toctree-l2"><a class="reference internal" href="../metaprogramming/#macros">Macros</a></li><li class="toctree-l2"><a class="reference internal" href="../metaprogramming/#code-generation">Code Generation</a></li><li class="toctree-l2"><a class="reference internal" href="../metaprogramming/#non-standard-string-literals">Non-Standard String Literals</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../arrays/">Multi-dimensional Arrays</a><ul><li class="toctree-l2"><a class="reference internal" href="../arrays/#arrays">Arrays</a></li><li class="toctree-l2"><a class="reference internal" href="../arrays/#sparse-matrices">Sparse Matrices</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../linear-algebra/">Linear algebra</a><ul><li class="toctree-l2"><a class="reference internal" href="../linear-algebra/#matrix-factorizations">Matrix factorizations</a></li><li class="toctree-l2"><a class="reference internal" href="../linear-algebra/#special-matrices">Special matrices</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../networking-and-streams/">Networking and Streams</a><ul><li class="toctree-l2"><a class="reference internal" href="../networking-and-streams/#basic-stream-i-o">Basic Stream I/O</a></li><li class="toctree-l2"><a class="reference internal" href="../networking-and-streams/#text-i-o">Text I/O</a></li><li class="toctree-l2"><a class="reference internal" href="../networking-and-streams/#working-with-files">Working with Files</a></li><li class="toctree-l2"><a class="reference internal" href="../networking-and-streams/#a-simple-tcp-example">A simple TCP example</a></li><li class="toctree-l2"><a class="reference internal" href="../networking-and-streams/#resolving-ip-addresses">Resolving IP Addresses</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../parallel-computing/">Parallel Computing</a><ul><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#code-availability-and-loading-packages">Code Availability and Loading Packages</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#data-movement">Data Movement</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#parallel-map-and-loops">Parallel Map and Loops</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#synchronization-with-remote-references">Synchronization With Remote References</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#scheduling">Scheduling</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#distributed-arrays">Distributed Arrays</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#constructing-distributed-arrays">Constructing Distributed Arrays</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#distributed-array-operations">Distributed Array Operations</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#shared-arrays-experimental">Shared Arrays (Experimental)</a></li><li class="toctree-l2"><a class="reference internal" href="../parallel-computing/#clustermanagers">ClusterManagers</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../running-external-programs/">Running External Programs</a><ul><li class="toctree-l2"><a class="reference internal" href="../running-external-programs/#interpolation">Interpolation</a></li><li class="toctree-l2"><a class="reference internal" href="../running-external-programs/#quoting">Quoting</a></li><li class="toctree-l2"><a class="reference internal" href="../running-external-programs/#pipelines">Pipelines</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../calling-c-and-fortran-code/">Calling C and Fortran Code</a><ul><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#mapping-c-types-to-julia">Mapping C Types to Julia</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#accessing-data-through-a-pointer">Accessing Data through a Pointer</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#passing-pointers-for-modifying-inputs">Passing Pointers for Modifying Inputs</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#garbage-collection-safety">Garbage Collection Safety</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#non-constant-function-specifications">Non-constant Function Specifications</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#indirect-calls">Indirect Calls</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#calling-convention">Calling Convention</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#accessing-global-variables">Accessing Global Variables</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#passing-julia-callback-functions-to-c">Passing Julia Callback Functions to C</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#c">C++</a></li><li class="toctree-l2"><a class="reference internal" href="../calling-c-and-fortran-code/#handling-platform-variations">Handling Platform Variations</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../interacting-with-julia/">Interacting With Julia</a><ul><li class="toctree-l2"><a class="reference internal" href="../interacting-with-julia/#the-different-prompt-modes">The different prompt modes</a></li><li class="toctree-l2"><a class="reference internal" href="../interacting-with-julia/#key-bindings">Key bindings</a></li><li class="toctree-l2"><a class="reference internal" href="../interacting-with-julia/#tab-completion">Tab completion</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../embedding/">Embedding Julia</a><ul><li class="toctree-l2"><a class="reference internal" href="../embedding/#high-level-embedding">High-Level Embedding</a></li><li class="toctree-l2"><a class="reference internal" href="../embedding/#converting-types">Converting Types</a></li><li class="toctree-l2"><a class="reference internal" href="../embedding/#calling-julia-functions">Calling Julia Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../embedding/#memory-management">Memory Management</a></li><li class="toctree-l2"><a class="reference internal" href="../embedding/#working-with-arrays">Working with Arrays</a></li><li class="toctree-l2"><a class="reference internal" href="../embedding/#exceptions">Exceptions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../packages/">Packages</a><ul><li class="toctree-l2"><a class="reference internal" href="../packages/#package-status">Package Status</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#adding-and-removing-packages">Adding and Removing Packages</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#installing-unregistered-packages">Installing Unregistered Packages</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#updating-packages">Updating Packages</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#checkout-pin-and-free">Checkout, Pin and Free</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../packages/#package-development">Package Development</a><ul><li class="toctree-l2"><a class="reference internal" href="../packages/#initial-setup">Initial Setup</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#making-changes-to-an-existing-package">Making changes to an existing package</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#creating-a-new-package">Creating a new Package</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#tagging-package-versions">Tagging Package Versions</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#fixing-package-requirements">Fixing Package Requirements</a></li><li class="toctree-l2"><a class="reference internal" href="../packages/#man-package-requirements">Requirements Specification</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../profile/">Profiling</a><ul><li class="toctree-l2"><a class="reference internal" href="../profile/#basic-usage">Basic usage</a></li><li class="toctree-l2"><a class="reference internal" href="../profile/#accumulation-and-clearing">Accumulation and clearing</a></li><li class="toctree-l2"><a class="reference internal" href="../profile/#options-for-controlling-the-display-of-profile-results">Options for controlling the display of profile results</a></li><li class="toctree-l2"><a class="reference internal" href="../profile/#configuration">Configuration</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../profile/#memory-allocation-analysis">Memory allocation analysis</a></li><li class="toctree-l1"><a class="reference internal" href="../performance-tips/">Performance Tips</a><ul><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#avoid-global-variables">Avoid global variables</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#measure-performance-with-time-and-pay-attention-to-memory-allocation">Measure performance with <tt class="docutils literal"><span class="pre">@time</span></tt> and pay attention to memory allocation</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#tools">Tools</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#avoid-containers-with-abstract-type-parameters">Avoid containers with abstract type parameters</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#type-declarations">Type declarations</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#break-functions-into-multiple-definitions">Break functions into multiple definitions</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#write-type-stable-functions">Write “type-stable” functions</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#avoid-changing-the-type-of-a-variable">Avoid changing the type of a variable</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#separate-kernel-functions">Separate kernel functions</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#access-arrays-in-memory-order-along-columns">Access arrays in memory order, along columns</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#pre-allocating-outputs">Pre-allocating outputs</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#avoid-string-interpolation-for-i-o">Avoid string interpolation for I/O</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#optimize-network-i-o-during-parallel-execution">Optimize network I/O during parallel execution</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#fix-deprecation-warnings">Fix deprecation warnings</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#tweaks">Tweaks</a></li><li class="toctree-l2"><a class="reference internal" href="../performance-tips/#performance-annotations">Performance Annotations</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../workflow-tips/">Workflow Tips</a><ul><li class="toctree-l2"><a class="reference internal" href="../workflow-tips/#repl-based-workflow">REPL-based workflow</a></li><li class="toctree-l2"><a class="reference internal" href="../workflow-tips/#browser-based-workflow">Browser-based workflow</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../style-guide/">Style Guide</a><ul><li class="toctree-l2"><a class="reference internal" href="../style-guide/#write-functions-not-just-scripts">Write functions, not just scripts</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#avoid-writing-overly-specific-types">Avoid writing overly-specific types</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#handle-excess-argument-diversity-in-the-caller">Handle excess argument diversity in the caller</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#append-to-names-of-functions-that-modify-their-arguments">Append <cite>!</cite> to names of functions that modify their arguments</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#avoid-strange-type-unions">Avoid strange type Unions</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#try-to-avoid-nullable-fields">Try to avoid nullable fields</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#avoid-elaborate-container-types">Avoid elaborate container types</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#use-naming-conventions-consistent-with-julia-s-base">Use naming conventions consistent with Julia’s <tt class="docutils literal"><span class="pre">base/</span></tt></a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#don-t-overuse-try-catch">Don’t overuse try-catch</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#don-t-parenthesize-conditions">Don’t parenthesize conditions</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#don-t-overuse">Don’t overuse ...</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#don-t-use-unnecessary-static-parameters">Don’t use unnecessary static parameters</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#avoid-confusion-about-whether-something-is-an-instance-or-a-type">Avoid confusion about whether something is an instance or a type</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#don-t-overuse-macros">Don’t overuse macros</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#don-t-expose-unsafe-operations-at-the-interface-level">Don’t expose unsafe operations at the interface level</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#don-t-overload-methods-of-base-container-types">Don’t overload methods of base container types</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#be-careful-with-type-equality">Be careful with type equality</a></li><li class="toctree-l2"><a class="reference internal" href="../style-guide/#do-not-write-x-f-x">Do not write <tt class="docutils literal"><span class="pre">x-&gt;f(x)</span></tt></a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../faq/">Frequently Asked Questions</a><ul><li class="toctree-l2"><a class="reference internal" href="../faq/#sessions-and-the-repl">Sessions and the REPL</a></li><li class="toctree-l2"><a class="reference internal" href="../faq/#functions">Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../faq/#types-type-declarations-and-constructors">Types, type declarations, and constructors</a></li><li class="toctree-l2"><a class="reference internal" href="../faq/#nothingness-and-missing-values">Nothingness and missing values</a></li><li class="toctree-l2"><a class="reference internal" href="../faq/#memory">Memory</a></li><li class="toctree-l2"><a class="reference internal" href="../faq/#julia-releases">Julia Releases</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../noteworthy-differences/">Noteworthy Differences from other Languages</a><ul><li class="toctree-l2"><a class="reference internal" href="../noteworthy-differences/#noteworthy-differences-from-matlab">Noteworthy differences from MATLAB</a></li><li class="toctree-l2"><a class="reference internal" href="../noteworthy-differences/#noteworthy-differences-from-r">Noteworthy differences from R</a></li><li class="toctree-l2"><a class="reference internal" href="../noteworthy-differences/#noteworthy-differences-from-python">Noteworthy differences from Python</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../unicode-input/">Unicode Input</a></li></ul><ul><li class="toctree-l1"><a class="reference internal" href="../../stdlib/base/">Essentials</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#introduction">Introduction</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#getting-around">Getting Around</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#all-objects">All Objects</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#types">Types</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#generic-functions">Generic Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#syntax">Syntax</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#system">System</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#errors">Errors</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#events">Events</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#reflection">Reflection</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/base/#internals">Internals</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/collections/">Collections and Data Structures</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#iteration">Iteration</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#general-collections">General Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#iterable-collections">Iterable Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#indexable-collections">Indexable Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#associative-collections">Associative Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#set-like-collections">Set-Like Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#dequeues">Dequeues</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#priorityqueue">PriorityQueue</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#heap-functions">Heap Functions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/math/">Mathematics</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/math/#mathematical-operators">Mathematical Operators</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/math/#mathematical-functions">Mathematical Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/math/#statistics">Statistics</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/math/#signal-processing">Signal Processing</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/math/#numerical-integration">Numerical Integration</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/numbers/">Numbers</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/numbers/#standard-numeric-types">Standard Numeric Types</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/numbers/#data-formats">Data Formats</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/numbers/#id1">Numbers</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/numbers/#bigfloats">BigFloats</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/numbers/#random-numbers">Random Numbers</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/strings/">Strings</a></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/arrays/">Arrays</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#basic-functions">Basic functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#constructors">Constructors</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#mathematical-operators-and-functions">Mathematical operators and functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#indexing-assignment-and-concatenation">Indexing, Assignment, and Concatenation</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#array-functions">Array functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#combinatorics">Combinatorics</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#bitarrays">BitArrays</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/arrays/#sparse-matrices">Sparse Matrices</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/parallel/">Tasks and Parallel Computing</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/parallel/#tasks">Tasks</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/parallel/#general-parallel-computing-support">General Parallel Computing Support</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/parallel/#distributed-arrays">Distributed Arrays</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/parallel/#shared-arrays-experimental-unix-only-feature">Shared Arrays (Experimental, UNIX-only feature)</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/linalg/">Linear Algebra</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/linalg/#module-Base.LinAlg">Standard Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/linalg/#module-Base.LinAlg.BLAS">BLAS Functions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/constants/">Constants</a></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/file/">Filesystem</a></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/io-network/">I/O and Network</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/io-network/#general-i-o">General I/O</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/io-network/#network-i-o">Network I/O</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/io-network/#text-i-o">Text I/O</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/io-network/#multimedia-i-o">Multimedia I/O</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/io-network/#memory-mapped-i-o">Memory-mapped I/O</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/punctuation/">Punctuation</a></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/sort/">Sorting and Related Functions</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/sort/#sorting-functions">Sorting Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/sort/#order-related-functions">Order-Related Functions</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/sort/#sorting-algorithms">Sorting Algorithms</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/pkg/">Package Manager Functions</a></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/collections/">Collections and Data Structures</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#iteration">Iteration</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#general-collections">General Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#iterable-collections">Iterable Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#indexable-collections">Indexable Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#associative-collections">Associative Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#set-like-collections">Set-Like Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#dequeues">Dequeues</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#priorityqueue">PriorityQueue</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/collections/#heap-functions">Heap Functions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/graphics/">Graphics</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/graphics/#geometry">Geometry</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/test/">Unit and Functional Testing</a><ul><li class="toctree-l2"><a class="reference internal" href="../../stdlib/test/#overview">Overview</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/test/#handlers">Handlers</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/test/#macros">Macros</a></li><li class="toctree-l2"><a class="reference internal" href="../../stdlib/test/#functions">Functions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/test/#testing-base-julia">Testing Base Julia</a></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/c/">C Interface</a></li><li class="toctree-l1"><a class="reference internal" href="../../stdlib/profile/">Profiling</a></li></ul><ul><li class="toctree-l1"><a class="reference internal" href="../../devdocs/reflection/">Reflection and introspection</a></li><li class="toctree-l1"><a class="reference internal" href="../../devdocs/julia/">Documentation of Julia’s Internals</a><ul><li class="toctree-l2"><a class="reference internal" href="../../devdocs/cartesian/">Base.Cartesian</a></li><li class="toctree-l2"><a class="reference internal" href="../../devdocs/sysimg/">System Image Building</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../devdocs/C/">Developing/debugging Julia’s C code</a><ul><li class="toctree-l2"><a class="reference internal" href="../../devdocs/backtraces/">Reporting and analyzing crashes (segfaults)</a></li><li class="toctree-l2"><a class="reference internal" href="../../devdocs/debuggingtips/">gdb debugging tips</a></li></ul></li></ul></div>   </nav><section class="wy-nav-content-wrap" data-toggle="wy-nav-shift"><nav aria-label="top navigation" class="wy-nav-top" role="navigation"><i class="fa fa-bars" data-toggle="wy-nav-top"></i><a href="../../">Julia Language</a></nav><div class="wy-nav-content"><div class="rst-content"><div aria-label="breadcrumbs navigation" role="navigation"><ul class="wy-breadcrumbs"><li><a href="../../">Docs</a> »</li><li>Complex and Rational Numbers</li><li class="wy-breadcrumbs-aside"><a href="../../_sources/manual/complex-and-rational-numbers.txt" rel="nofollow"> View page source</a></li></ul><hr/></div><div class="document" role="main"><div class="section" id="complex-and-rational-numbers"><span id="man-complex-and-rational-numbers"></span><h1>Complex and Rational Numbers<a class="headerlink" href="#complex-and-rational-numbers" title="Permalink to this headline">¶</a></h1><p>Julia ships with predefined types representing both complex and rational numbers, and supports all <a class="reference internal" href="../mathematical-operations/#man-mathematical-operations"><em>standard mathematical operations</em></a> on them. <a class="reference internal" href="../conversion-and-promotion/#man-conversion-and-promotion"><em>Conversion and Promotion</em></a> are defined so that operations on any combination of predefined numeric types, whether primitive or composite, behave as expected.</p><div class="section" id="complex-numbers"><span id="man-complex-numbers"></span><h2>Complex Numbers<a class="headerlink" href="#complex-numbers" title="Permalink to this headline">¶</a></h2><p>The global constant <a class="reference internal" href="../../stdlib/numbers/#Base.im" title="Base.im"><tt class="xref jl jl-const docutils literal"><span class="pre">im</span></tt></a> is bound to the complex number <em>i</em>, representing the principal square root of -1. It was deemed harmful to co-opt the name <tt class="docutils literal"><span class="pre">i</span></tt> for a global constant, since it is such a popular index variable name. Since Julia allows numeric literals to be <a class="reference internal" href="../integers-and-floating-point-numbers/#man-numeric-literal-coefficients"><em>juxtaposed with identifiers as coefficients</em></a>, this binding suffices to provide convenient syntax for complex numbers, similar to the traditional mathematical notation:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span></pre></div></div><p>You can perform all the standard arithmetic operations with complex numbers:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="mi">2</span><span class="o">-</span><span class="mi">3</span><span class="nb">im</span><span class="p">)</span><span class="mi">8</span><span class="o">+</span><span class="mi">1</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mf">0.6</span><span class="o">+</span><span class="mf">0.8</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">+</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mi">2</span><span class="o">+</span><span class="mi">0</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="o">-</span><span class="mi">3</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="p">(</span><span class="mi">5</span><span class="o">-</span><span class="mi">1</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mi">8</span><span class="o">+</span><span class="mi">3</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">^</span><span class="mi">2</span><span class="o">-</span><span class="mi">3</span><span class="o">-</span><span class="mi">4</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">^</span><span class="mf">2.5</span><span class="mf">2.7296244647840084</span><span class="o">-</span><span class="mf">6.960664459571898</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">^</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">1</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mf">0.27910381075826657</span><span class="o">+</span><span class="mf">0.08708053414102428</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="p">(</span><span class="mi">2</span><span class="o">-</span><span class="mi">5</span><span class="nb">im</span><span class="p">)</span><span class="mi">6</span><span class="o">-</span><span class="mi">15</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="p">(</span><span class="mi">2</span><span class="o">-</span><span class="mi">5</span><span class="nb">im</span><span class="p">)</span><span class="o">^</span><span class="mi">2</span><span class="o">-</span><span class="mi">63</span><span class="o">-</span><span class="mi">60</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="p">(</span><span class="mi">2</span><span class="o">-</span><span class="mi">5</span><span class="nb">im</span><span class="p">)</span><span class="o">^-</span><span class="mf">1.0</span><span class="mf">0.20689655172413796</span><span class="o">+</span><span class="mf">0.5172413793103449</span><span class="nb">im</span></pre></div></div><p>The promotion mechanism ensures that combinations of operands of different types just work:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mi">1</span><span class="nb">im</span><span class="p">)</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="mi">1</span><span class="o">+</span><span class="mi">3</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">+</span><span class="mf">0.5</span><span class="mf">1.5</span><span class="o">+</span><span class="mf">2.0</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mf">0.5</span><span class="nb">im</span><span class="mf">2.0</span><span class="o">+</span><span class="mf">2.5</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mf">0.75</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mf">0.75</span><span class="o">+</span><span class="mf">1.5</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">3</span><span class="nb">im</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="mf">1.0</span><span class="o">+</span><span class="mf">1.5</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">1</span><span class="o">-</span><span class="mi">3</span><span class="nb">im</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mf">0.5</span><span class="o">-</span><span class="mf">1.0</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="nb">im</span><span class="o">^</span><span class="mi">2</span><span class="o">-</span><span class="mi">2</span><span class="o">+</span><span class="mi">0</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">1</span><span class="o">+</span><span class="mi">3</span><span class="o">/</span><span class="mi">4</span><span class="nb">im</span><span class="mf">1.0</span><span class="o">-</span><span class="mf">0.75</span><span class="nb">im</span></pre></div></div><p>Note that <tt class="docutils literal"><span class="pre">3/4im</span><span class="pre">==</span><span class="pre">3/(4*im)</span><span class="pre">==</span><span class="pre">-(3/4*im)</span></tt>, since a literal coefficient binds more tightly than division.</p><p>Standard functions to manipulate complex values are provided:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="n">real</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mi">1</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">imag</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mi">2</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">conj</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mi">1</span><span class="o">-</span><span class="mi">2</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">abs</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mf">2.23606797749979</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">abs2</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mi">5</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">angle</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mf">1.1071487177940904</span></pre></div></div><p>As usual, the absolute value (<a class="reference internal" href="../../stdlib/math/#Base.abs" title="Base.abs"><tt class="xref jl jl-func docutils literal"><span class="pre">abs()</span></tt></a>) of a complex number is its distance from zero. <a class="reference internal" href="../../stdlib/math/#Base.abs2" title="Base.abs2"><tt class="xref jl jl-func docutils literal"><span class="pre">abs2()</span></tt></a> gives the square of the absolute value, and is of particular use for complex numbers where it avoids taking a square root. <a class="reference internal" href="../../stdlib/math/#Base.angle" title="Base.angle"><tt class="xref jl jl-func docutils literal"><span class="pre">angle()</span></tt></a> returns the phase angle in radians (also known as the <em>argument</em> or <em>arg</em> function). The full gamut of other <a class="reference internal" href="../mathematical-operations/#man-elementary-functions"><em>Elementary Functions</em></a> is also defined for complex numbers:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="nb">im</span><span class="p">)</span><span class="mf">0.7071067811865476</span><span class="o">+</span><span class="mf">0.7071067811865475</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mf">1.272019649514069</span><span class="o">+</span><span class="mf">0.7861513777574233</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">cos</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mf">2.0327230070196656</span><span class="o">-</span><span class="mf">3.0518977991518</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">exp</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mf">1.1312043837568135</span><span class="o">+</span><span class="mf">2.4717266720048188</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">sinh</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="o">-</span><span class="mf">0.4890562590412937</span><span class="o">+</span><span class="mf">1.4031192506220405</span><span class="nb">im</span></pre></div></div><p>Note that mathematical functions typically return real values when applied to real numbers and complex values when applied to complex numbers. For example, <a class="reference internal" href="../../stdlib/math/#Base.sqrt" title="Base.sqrt"><tt class="xref jl jl-func docutils literal"><span class="pre">sqrt()</span></tt></a> behaves differently when applied to <tt class="docutils literal"><span class="pre">-1</span></tt> versus <tt class="docutils literal"><span class="pre">-1</span><span class="pre">+</span><span class="pre">0im</span></tt> even though <tt class="docutils literal"><span class="pre">-1</span><span class="pre">==</span><span class="pre">-1</span><span class="pre">+</span><span class="pre">0im</span></tt>:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="n">sqrt</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="n">ERROR</span><span class="p">:</span><span class="n">DomainError</span><span class="n">sqrt</span><span class="n">will</span><span class="n">only</span><span class="k">return</span><span class="n">a</span><span class="n">complex</span><span class="n">result</span><span class="k">if</span><span class="n">called</span><span class="n">with</span><span class="n">a</span><span class="n">complex</span><span class="n">argument</span><span class="o">.</span><span class="k">try</span><span class="n">sqrt</span><span class="p">(</span><span class="n">complex</span><span class="p">(</span><span class="n">x</span><span class="p">))</span><span class="k">in</span><span class="n">sqrt</span><span class="n">at</span><span class="n">math</span><span class="o">.</span><span class="n">jl</span><span class="p">:</span><span class="mi">133</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">sqrt</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="o">+</span><span class="mi">0</span><span class="nb">im</span><span class="p">)</span><span class="mf">0.0</span><span class="o">+</span><span class="mf">1.0</span><span class="nb">im</span></pre></div></div><p>The <a class="reference internal" href="../integers-and-floating-point-numbers/#man-numeric-literal-coefficients"><em>literal numeric coefficient notation</em></a> does not work when constructing complex number from variables. Instead, the multiplication must be explicitly written out:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span><span class="n">b</span><span class="o">=</span><span class="mi">2</span><span class="p">;</span><span class="n">a</span><span class="o">+</span><span class="n">b</span><span class="o">*</span><span class="nb">im</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span></pre></div></div><p>However, this is <em>not</em> recommended; Use the <a class="reference internal" href="../../stdlib/numbers/#Base.complex" title="Base.complex"><tt class="xref jl jl-func docutils literal"><span class="pre">complex()</span></tt></a> function instead to construct a complex value directly from its real and imaginary parts.:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="n">complex</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span></pre></div></div><p>This construction avoids the multiplication and addition operations.</p><p><a class="reference internal" href="../../stdlib/numbers/#Base.Inf" title="Base.Inf"><tt class="xref jl jl-const docutils literal"><span class="pre">Inf</span></tt></a> and <a class="reference internal" href="../../stdlib/numbers/#Base.NaN" title="Base.NaN"><tt class="xref jl jl-const docutils literal"><span class="pre">NaN</span></tt></a> propagate through complex numbers in the real and imaginary parts of a complex number as described in the <a class="reference internal" href="../integers-and-floating-point-numbers/#man-special-floats"><em>Special floating-point values</em></a> section:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">1</span><span class="o">+</span><span class="nb">Inf</span><span class="o">*</span><span class="nb">im</span><span class="mf">1.0</span><span class="o">+</span><span class="nb">Inf</span><span class="o">*</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">1</span><span class="o">+</span><span class="n">NaN</span><span class="o">*</span><span class="nb">im</span><span class="mf">1.0</span><span class="o">+</span><span class="n">NaN</span><span class="o">*</span><span class="nb">im</span></pre></div></div></div><div class="section" id="rational-numbers"><span id="man-rational-numbers"></span><h2>Rational Numbers<a class="headerlink" href="#rational-numbers" title="Permalink to this headline">¶</a></h2><p>Julia has a rational number type to represent exact ratios of integers. Rationals are constructed using the <a class="reference internal" href="../../stdlib/math/#Base.//" title="Base.//"><tt class="xref jl jl-obj docutils literal"><span class="pre">//</span></tt></a> operator:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span></pre></div></div><p>If the numerator and denominator of a rational have common factors, they are reduced to lowest terms such that the denominator is non-negative:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">6</span><span class="o">//</span><span class="mi">9</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="n">julia</span><span class="o">&gt;</span><span class="o">-</span><span class="mi">4</span><span class="o">//</span><span class="mi">8</span><span class="o">-</span><span class="mi">1</span><span class="o">//</span><span class="mi">2</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">5</span><span class="o">//-</span><span class="mi">15</span><span class="o">-</span><span class="mi">1</span><span class="o">//</span><span class="mi">3</span><span class="n">julia</span><span class="o">&gt;</span><span class="o">-</span><span class="mi">4</span><span class="o">//-</span><span class="mi">12</span><span class="mi">1</span><span class="o">//</span><span class="mi">3</span></pre></div></div><p>This normalized form for a ratio of integers is unique, so equality of rational values can be tested by checking for equality of the numerator and denominator. The standardized numerator and denominator of a rational value can be extracted using the <a class="reference internal" href="../../stdlib/math/#Base.num" title="Base.num"><tt class="xref jl jl-func docutils literal"><span class="pre">num()</span></tt></a> and <a class="reference internal" href="../../stdlib/math/#Base.den" title="Base.den"><tt class="xref jl jl-func docutils literal"><span class="pre">den()</span></tt></a> functions:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="n">num</span><span class="p">(</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="p">)</span><span class="mi">2</span><span class="n">julia</span><span class="o">&gt;</span><span class="n">den</span><span class="p">(</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="p">)</span><span class="mi">3</span></pre></div></div><p>Direct comparison of the numerator and denominator is generally not necessary, since the standard arithmetic and comparison operations are defined for rational values:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="o">==</span><span class="mi">6</span><span class="o">//</span><span class="mi">9</span><span class="n">true</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="o">==</span><span class="mi">9</span><span class="o">//</span><span class="mi">27</span><span class="n">false</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="o">//</span><span class="mi">7</span><span class="o">&lt;</span><span class="mi">1</span><span class="o">//</span><span class="mi">2</span><span class="n">true</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="o">//</span><span class="mi">4</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="n">true</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">//</span><span class="mi">4</span><span class="o">+</span><span class="mi">1</span><span class="o">//</span><span class="mi">6</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">5</span><span class="o">//</span><span class="mi">12</span><span class="o">-</span><span class="mi">1</span><span class="o">//</span><span class="mi">4</span><span class="mi">1</span><span class="o">//</span><span class="mi">6</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">5</span><span class="o">//</span><span class="mi">8</span><span class="o">*</span><span class="mi">3</span><span class="o">//</span><span class="mi">12</span><span class="mi">5</span><span class="o">//</span><span class="mi">32</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">6</span><span class="o">//</span><span class="mi">5</span><span class="o">/</span><span class="mi">10</span><span class="o">//</span><span class="mi">7</span><span class="mi">21</span><span class="o">//</span><span class="mi">25</span></pre></div></div><p>Rationals can be easily converted to floating-point numbers:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="n">float</span><span class="p">(</span><span class="mi">3</span><span class="o">//</span><span class="mi">4</span><span class="p">)</span><span class="mf">0.75</span></pre></div></div><p>Conversion from rational to floating-point respects the following identity for any integral values of <tt class="docutils literal"><span class="pre">a</span></tt> and <tt class="docutils literal"><span class="pre">b</span></tt>, with the exception of the case <tt class="docutils literal"><span class="pre">a</span><span class="pre">==</span><span class="pre">0</span></tt> and <tt class="docutils literal"><span class="pre">b</span><span class="pre">==</span><span class="pre">0</span></tt>:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="nb">isequal</span><span class="p">(</span><span class="n">float</span><span class="p">(</span><span class="n">a</span><span class="o">//</span><span class="n">b</span><span class="p">),</span><span class="n">a</span><span class="o">/</span><span class="n">b</span><span class="p">)</span><span class="n">true</span></pre></div></div><p>Constructing infinite rational values is acceptable:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">5</span><span class="o">//</span><span class="mi">0</span><span class="mi">1</span><span class="o">//</span><span class="mi">0</span><span class="n">julia</span><span class="o">&gt;</span><span class="o">-</span><span class="mi">3</span><span class="o">//</span><span class="mi">0</span><span class="o">-</span><span class="mi">1</span><span class="o">//</span><span class="mi">0</span><span class="n">julia</span><span class="o">&gt;</span><span class="nb">typeof</span><span class="p">(</span><span class="n">ans</span><span class="p">)</span><span class="n">Rational</span><span class="p">{</span><span class="kt">Int64</span><span class="p">}</span><span class="p">(</span><span class="n">constructor</span><span class="n">with</span><span class="mi">1</span><span class="n">method</span><span class="p">)</span></pre></div></div><p>Trying to construct a <a class="reference internal" href="../../stdlib/numbers/#Base.NaN" title="Base.NaN"><tt class="xref jl jl-const docutils literal"><span class="pre">NaN</span></tt></a> rational value, however, is not:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">0</span><span class="o">//</span><span class="mi">0</span><span class="n">ERROR</span><span class="p">:</span><span class="n">invalid</span><span class="n">rational</span><span class="p">:</span><span class="mi">0</span><span class="o">//</span><span class="mi">0</span><span class="k">in</span><span class="n">Rational</span><span class="n">at</span><span class="n">rational</span><span class="o">.</span><span class="n">jl</span><span class="p">:</span><span class="mi">6</span><span class="k">in</span><span class="o">//</span><span class="n">at</span><span class="n">rational</span><span class="o">.</span><span class="n">jl</span><span class="p">:</span><span class="mi">15</span></pre></div></div><p>As usual, the promotion system makes interactions with other numeric types effortless:</p><div class="highlight-julia"><div class="highlight"><pre><span></span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="o">//</span><span class="mi">5</span><span class="o">+</span><span class="mi">1</span><span class="mi">8</span><span class="o">//</span><span class="mi">5</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="o">//</span><span class="mi">5</span><span class="o">-</span><span class="mf">0.5</span><span class="mf">0.09999999999999998</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">//</span><span class="mi">7</span><span class="o">*</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mi">2</span><span class="o">//</span><span class="mi">7</span><span class="o">+</span><span class="mi">4</span><span class="o">//</span><span class="mi">7</span><span class="o">*</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">2</span><span class="o">//</span><span class="mi">7</span><span class="o">*</span><span class="p">(</span><span class="mf">1.5</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mf">0.42857142857142855</span><span class="o">+</span><span class="mf">0.5714285714285714</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">3</span><span class="o">//</span><span class="mi">2</span><span class="o">/</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="p">)</span><span class="mi">3</span><span class="o">//</span><span class="mi">10</span><span class="o">-</span><span class="mi">3</span><span class="o">//</span><span class="mi">5</span><span class="o">*</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">1</span><span class="o">//</span><span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="nb">im</span><span class="mi">1</span><span class="o">//</span><span class="mi">2</span><span class="o">+</span><span class="mi">2</span><span class="o">//</span><span class="mi">1</span><span class="o">*</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">1</span><span class="o">+</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="nb">im</span><span class="mi">1</span><span class="o">//</span><span class="mi">1</span><span class="o">-</span><span class="mi">2</span><span class="o">//</span><span class="mi">3</span><span class="o">*</span><span class="nb">im</span><span class="n">julia</span><span class="o">&gt;</span><span class="mf">0.5</span><span class="o">==</span><span class="mi">1</span><span class="o">//</span><span class="mi">2</span><span class="n">true</span><span class="n">julia</span><span class="o">&gt;</span><span class="mf">0.33</span><span class="o">==</span><span class="mi">1</span><span class="o">//</span><span class="mi">3</span><span class="n">false</span><span class="n">julia</span><span class="o">&gt;</span><span class="mf">0.33</span><span class="o">&lt;</span><span class="mi">1</span><span class="o">//</span><span class="mi">3</span><span class="n">true</span><span class="n">julia</span><span class="o">&gt;</span><span class="mi">1</span><span class="o">//</span><span class="mi">3</span><span class="o">-</span><span class="mf">0.33</span><span class="mf">0.0033333333333332993</span></pre></div></div></div></div></div><footer><div aria-label="footer navigation" class="rst-footer-buttons" role="navigation"><a class="btn btn-neutral float-right" href="../strings/" title="Strings">Next <span class="fa fa-arrow-circle-right"></span></a><a class="btn btn-neutral" href="../mathematical-operations/" title="Mathematical Operations and Elementary Functions"><span class="fa fa-arrow-circle-left"></span> Previous</a></div><hr/><div role="contentinfo"><p></p></div><a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a></footer></div></div></section></div><script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT:'../../', VERSION:'0.3.13-pre', COLLAPSE_INDEX:false, FILE_SUFFIX:'', HAS_SOURCE: true }; </script><script src="../../_static/jquery.js" type="text/javascript"></script><script src="../../_static/underscore.js" type="text/javascript"></script><script src="../../_static/doctools.js" type="text/javascript"></script><script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script><script src="../../_static/js/theme.js" type="text/javascript"></script><script type="text/javascript"> jQuery(function () { SphinxRtdTheme.StickyNav.enable(); }); </script></body></HTML>

Pages: 1 2 3 4 5 6 7 8 9 10