Euler's identity: Difference between revisions

m
syntax highlighting fixup automation
(Added high-precision Scheme implementation.)
m (syntax highlighting fixup automation)
Line 37:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">print(math:e ^ (math:pi * 1i) + 1)</langsyntaxhighlight>
 
{{out}}
Line 45:
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">with Ada.Long_Complex_Text_IO; use Ada.Long_Complex_Text_IO;
with Ada.Numerics; use Ada.Numerics;
with Ada.Numerics.Long_Complex_Types; use Ada.Numerics.Long_Complex_Types;
Line 52:
begin
Put (Exp (Pi * i) + 1.0);
end Eulers_Identity;</langsyntaxhighlight>
 
{{out}}
Line 61:
<br>
We could use the identity exp(x + iy) = exp(x)( cos y + i sin y ), however the following uses a series expansion for exp(ix).
<langsyntaxhighlight lang="algol68">BEGIN
# calculate an approximation to e^(i pi) + 1 which should be 0 (Euler's identity) #
 
Line 113:
)
)
END</langsyntaxhighlight>
{{out}}
<pre>
Line 120:
 
=={{header|Bracmat}}==
<syntaxhighlight lang Bracmat="bracmat">e^(i*pi)+1</langsyntaxhighlight>By symbolic calculation:<pre>0</pre>
 
=={{header|C}}==
Line 126:
 
The following code has been tested with gcc 5.4.0 on Ubuntu 16.04.
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <math.h>
#include <complex.h>
Line 139:
printf("e ^ %lci + 1 = [%.16f, %.16f] %lc 0\n", pi, creal(e), cimag(e), ae);
return 0;
}</langsyntaxhighlight>
 
{{output}}
Line 147:
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">using System;
using System.Numerics;
 
Line 158:
Console.WriteLine(Complex.Pow(e, i * π) + 1);
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 165:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <complex>
 
Line 171:
std::cout << std::exp(std::complex<double>(0.0, M_PI)) + 1.0 << std::endl;
return 0;
}</langsyntaxhighlight>
 
{{output}}
Line 181:
=={{header|Common Lisp}}==
Common Lisp has complex number arithmetic built into it.
<syntaxhighlight lang="common lisp">
<lang Common Lisp>
(+ 1 (exp (complex 0 pi)))
</syntaxhighlight>
</lang>
<pre>
#C(0.0L0 -5.0165576136843360246L-20)
Line 189:
=={{header|Delphi}}==
{{libheader| System.VarCmplx}}
<syntaxhighlight lang="delphi">
<lang Delphi>
program Euler_identity;
 
Line 201:
writeln(result);
readln;
end.</langsyntaxhighlight>
{{out}}
<pre>0 + 0i</pre>
Line 207:
=={{header|F_Sharp|F#}}==
As per the discussion page this task as described is to show that -1+1=0
<langsyntaxhighlight lang="fsharp">
printfn "-1 + 1 = %d" (-1+1)
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 215:
</pre>
I shall also show that cos π = -1 and sin π = 0
<langsyntaxhighlight lang="fsharp">
printfn "cos(pi)=%f and sin(pi)=%f" (cos 3.141592653589793) (sin 3.141592653589793)
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 223:
</pre>
I shall try the formula e<sup>iπ</sup>. I'll use the MathNet.Numerics package. I'll leave you the reader to determine what it 'proves'.
<langsyntaxhighlight lang="fsharp">
let i =MathNet.Numerics.complex(0.0,1.0);;
let pi=MathNet.Numerics.complex(MathNet.Numerics.Constants.Pi,0.0);;
let e =MathNet.Numerics.complex(MathNet.Numerics.Constants.E ,0.0);;
printfn "e**(i*pi) = %A" (e**(i*pi));;
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 234:
</pre>
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: math math.constants math.functions prettyprint ;
1 e pi C{ 0 1 } * ^ + .</langsyntaxhighlight>
{{out}}
<pre>
Line 243:
=={{header|Forth}}==
Uses fs. (scientific) to print the imaginary term, since that's the one that's inexact.
<syntaxhighlight lang="forth">
<lang Forth>
." e^(i*π) + 1 = " pi fcos 1e0 f+ f. '+ emit space pi fsin fs. 'i emit cr
bye
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 253:
 
=={{header|Fortran}}==
<langsyntaxhighlight lang="fortran">
program euler
use iso_fortran_env, only: output_unit, REAL64
Line 264:
write(output_unit,*) e**(pi*i) + 1
end program euler
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 274:
Provides complex arithmetic and a very rapidly converging algorithm for e^z.
 
<langsyntaxhighlight lang="freebasic">#define PI 3.141592653589793238462643383279502884197169399375105821
#define MAXITER 12
 
Line 375:
printc( curr )
print " Absolute error = ", absc(curr)
next i</langsyntaxhighlight>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
import (
Line 388:
func main() {
fmt.Println(cmplx.Exp(math.Pi * 1i) + 1.0)
}</langsyntaxhighlight>
 
{{output}}
Line 398:
=={{header|Groovy}}==
Because the Groovy language does not provide a built-in facility for complex arithmetic, this example relies on the Complex class defined in the [[Complex_numbers#Groovy|Complex numbers]] example.
<langsyntaxhighlight lang="groovy">import static Complex.*
 
Number.metaClass.mixin ComplexCategory
Line 407:
println "e ** (π * i) + 1 = " + (e ** (π * i) + 1)
 
println "| e ** (π * i) + 1 | = " + (e ** (π * i) + 1).ρ</langsyntaxhighlight>
Output: (yadda, yadda, dust, yadda)
<pre>e ** (π * i) + 1 = 1.2246467991473532E-16i
Line 415:
 
A double is not quite real.
<langsyntaxhighlight Haskelllang="haskell">import Data.Complex
 
eulerIdentityZeroIsh :: Complex Double
Line 422:
main :: IO ()
main = print eulerIdentityZeroIsh</langsyntaxhighlight>
{{Out}}
 
Line 429:
 
=={{header|J}}==
<syntaxhighlight lang="j">
<lang j>
NB. Euler's number is the default base for power
NB. using j's expressive numeric notation:
Line 452:
1 (=!.1e_15) ^ j. TAU
1
</syntaxhighlight>
</lang>
 
=={{header|Java}}==
Since Java lacks a complex number class, a class is used that has sufficient operations.
<langsyntaxhighlight lang="java">
public class EulerIdentity {
 
Line 487:
}
}
</syntaxhighlight>
</lang>
 
{{out}}
Line 502:
be placed in a module to avoid name conflicts, and thus no special
prefix is used here.
<langsyntaxhighlight lang="jq">def multiply(x; y):
if (x|type) == "number" then
if (y|type) == "number" then [ x*y, 0 ]
Line 528:
 
def pi: 4 * (1|atan);
</syntaxhighlight>
</lang>
 
===The Task===
<langsyntaxhighlight lang="jq">"e^iπ: \( exp( [0, pi ] ) )",
"e^iπ + 1: \( plus(1; exp( [0, pi ] ) ))"</langsyntaxhighlight>
 
{{out}}
Line 542:
Julia has a builtin <tt>Complex{T}</tt> parametrized type.
 
<langsyntaxhighlight lang="julia">@show ℯ^(π * im) + 1
@assert ℯ^(π * im) ≈ -1</langsyntaxhighlight>
 
{{out}}
Line 550:
Using symbolic algebra, through the [https://github.com/chakravala/Reduce.jl Reduce.jl] package.
 
<langsyntaxhighlight lang="julia">using Reduce
@force using Reduce.Algebra
 
@show ℯ^(π * :i) + 1
@assert ℯ^(π * :i) + 1 == 0</langsyntaxhighlight>
 
{{out}}
Line 563:
 
e ^ πi is calculated by summing successive terms of the power series for e ^ x until the modulus of the difference between terms is no longer significant given the precision of the Double type (about 10 ^ -16).
<langsyntaxhighlight lang="scala">// Version 1.2.40
 
import kotlin.math.sqrt
Line 614:
e += Complex(1.0, 0.0)
println("e^${SMALL_PI}i + 1 = $e $APPROX_EQUALS 0")
}</langsyntaxhighlight>
 
{{output}}
Line 622:
 
=={{header|Lambdatalk}}==
<langsyntaxhighlight lang="scheme">
{require lib_complex}
 
'{C.exp {C.mul {C.new 0 1} {C.new {PI} 0}}} // e^πi = exp( [π,0] * [0,1] )
-> (-1 1.2246467991473532e-16) // = -1
</syntaxhighlight>
</lang>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">local c = {
new = function(s,r,i) s.__index=s return setmetatable({r=r, i=i}, s) end,
add = function(s,o) return s:new(s.r+o.r, s.i+o.i) end,
Line 640:
local one = c:new(1, 0)
local zero = i:mul(pi):exp():add(one)
print(string.format("e^(i*pi)+1 is approximately zero: %.18g%+.18gi", zero.r, zero.i))</langsyntaxhighlight>
{{out}}
<pre>e^(i*pi)+1 is approximately zero: 0+1.22460635382237726e-016i</pre>
<langsyntaxhighlight lang="lua">> -- alternatively, equivalent one-liner from prompt:
> math.exp(0)*math.cos(math.pi)+1, math.exp(0)*math.sin(math.pi)
0.0 1.2246063538224e-016</langsyntaxhighlight>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang Mathematica="mathematica">E^(I Pi) + 1</langsyntaxhighlight>
{{out}}
<pre>0</pre>
 
=={{header|Nim}}==
<langsyntaxhighlight Nimlang="nim">import math, complex
 
echo "exp(iπ) + 1 = ", exp(complex(0.0, PI)) + 1, " ~= 0"</langsyntaxhighlight>
 
{{out}}
Line 661:
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml"># open Complex;;
# let pi = acos (-1.0);;
val pi : float = 3.14159265358979312
# add (exp { re = 0.0; im = pi }) { re = 1.0; im = 0.0 };;
- : Complex.t = {re = 0.; im = 1.22464679914735321e-16}</langsyntaxhighlight>
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">use Math::Complex;
print exp(pi * i) + 1, "\n";</langsyntaxhighlight>
{{out}}
<pre>1.22464679914735e-16i</pre>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #004080;">complex</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
Line 682:
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_round</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1e16</span><span style="color: #0000FF;">),</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_round</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1e15</span><span style="color: #0000FF;">),</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
{{out}}
The actual result and two rounded versions (to prove the rounding is doing what it should - the second arg is an inverted precision).
Line 692:
{{trans|Prolog}}
Of course "symbolically" you can just do this (ha ha):
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">reduce</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
Line 721:
<span style="color: #000000;">reduce</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"exp(i*pi)+1"</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 733:
=={{header|Prolog}}==
Symbolically manipulates Euler's identity until it can't be further reduced (and we get zero :)
<syntaxhighlight lang="prolog">
<lang Prolog>
% reduce() prints the intermediate results so that one can see Prolog "thinking."
%
Line 770:
 
simplify(X, X).
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 783:
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">>>> import math
>>> math.e ** (math.pi * 1j) + 1
1.2246467991473532e-16j</langsyntaxhighlight>
 
=={{header|R}}==
<langsyntaxhighlight Rlang="r"># lang R
exp(1i * pi) + 1</langsyntaxhighlight>
{{out}}<pre>0+1.224606e-16i</pre>
 
Symbolically with the Ryacas package (on CRAN):
<langsyntaxhighlight Rlang="r">library(Ryacas)
as_r(yac_str("Exp(I * Pi) + 1"))</langsyntaxhighlight>
{{out}}<pre>0</pre>
 
=={{header|Racket}}==
<langsyntaxhighlight lang="racket">#lang racket
(+ (exp (* 0+i pi)) 1)</langsyntaxhighlight>
{{out}}<pre>0.0+1.2246063538223773e-016i</pre>
 
Line 809:
e, i and π are all available as built-in constants in Raku.
 
<syntaxhighlight lang="raku" perl6line>sub infix:<⁢> is tighter(&infix:<**>) { $^a * $^b };
 
say 'e**i⁢π + 1 ≅ 0 : ', e**i⁢π + 1 ≅ 0;
say 'Error: ', e**i⁢π + 1;</langsyntaxhighlight>
{{out}}
<pre>e**i⁢π + 1 ≅ 0 : True
Line 853:
of &nbsp; pi &nbsp; being defined within the REXX
<br>program.
<langsyntaxhighlight lang="rexx">/*REXX program proves Euler's identity by showing that: e^(i pi) + 1 ≡ 0 */
numeric digits length( pi() ) - length(.) /*define pi; set # dec. digs precision*/
cosPI= fmt( cos(pi) ) /*calculate the value of cos(pi). */
Line 875:
parse value format(x, 2, 1, , 0) 'E0' with g 'E' _ .; g= g * .5'e'_ % 2
do j=0 while h>9; m.j= h; h= h % 2 + 1; end
do k=j+5 to 0 by -1; numeric digits m.k; g= (g+x/g) *.5; end; return g || i</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the internal default input:}}
<pre>
Line 891:
<br>programmatically invoked with the requested number of decimal digits).
 
<langsyntaxhighlight lang="rexx">/*────────────────── 1,051 decimal digs of pi. ──────────────────*/
 
pi= 3.14159265358979323846264338327950288419716939937510
Line 913:
pi= pi || 59825349042875546873115956286388235378759375195778
pi= pi || 18577805321712268066130019278766111959092164201989
pi= pi || 38095257201065485863278865936153381827968230301952 </langsyntaxhighlight>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">
include Math
 
E ** (PI * 1i) + 1
# => (0.0+0.0i)</langsyntaxhighlight>
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">use std::f64::consts::PI;
 
extern crate num_complex;
Line 930:
fn main() {
println!("{:e}", Complex::new(0.0, PI).exp() + 1.0);
}</langsyntaxhighlight>
 
{{output}}
Line 940:
This example makes use of Spire's numeric data types. Complex takes a type parameter determining the type of the coefficients of a + bi, and Real is Spire's exact (i.e. arbitrary precision) numeric data type.
 
<langsyntaxhighlight lang="scala">import spire.math.{Complex, Real}
 
object Scratch extends App{
Line 950:
println(e.pow(pi*i) + one)
}</langsyntaxhighlight>
 
{{output}}
Line 958:
=={{header|Scheme}}==
{{works with|Chez Scheme}}
<langsyntaxhighlight lang="scheme">; A way to get pi.
(define pi (acos -1))
 
; Print the value of e^(i*pi) + 1 -- should be 0.
(printf "e^(i*pi) + 1 = ~a~%" (+ (exp (* +i pi)) 1))</langsyntaxhighlight>
{{out}}
<pre>e^(i*pi) + 1 = 0.0+1.2246467991473532e-16i
Line 970:
The series are computed using exact rational numbers.
This code converts the rational results into decimal representation.
<langsyntaxhighlight lang="scheme">; Procedure to compute factorial.
 
(define fact
Line 1,057:
(e-pi-i (exp-series (* pi +i) 222))
(euler-id (+ e-pi-i 1)))
(printf "e^(i*pi) + 1 = ~a~%" (rat-cplx->dec-str euler-id 70)))</langsyntaxhighlight>
{{out}}
<pre>e^(i*pi) + 1 =
Line 1,064:
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">say ('e**i⁢π + 1 ≅ 0 : ', Num.e**Num.pi.i + 1 ≅ 0)
say ('Error: ', Num.e**Num.pi.i + 1)</langsyntaxhighlight>
{{out}}
<pre>
Line 1,074:
=={{header|Tcl}}==
=== Using tcllib ===
<langsyntaxhighlight lang="tcl"># Set up complex sandbox (since we're doing a star import)
namespace eval complex_ns {
package require math::complexnumbers
Line 1,083:
set r [+ [exp [complex 0 $pi]] [complex 1 0]]
puts "e**(pi*i) = [real $r]+[imag $r]i"
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,090:
 
=== Using VecTcl ===
<langsyntaxhighlight lang="tcl">package require vectcl
namespace import vectcl::vexpr
 
set ans [vexpr {pi=acos(-1); exp(pi*1i) + 1}]
puts "e**(pi*i) = $ans"
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,104:
{{libheader|Wren-complex}}
 
<langsyntaxhighlight lang="ecmascript">import "/complex" for Complex
 
System.print((Complex.new(0, Num.pi).exp + Complex.one).toString)</langsyntaxhighlight>
 
{{out}}
Line 1,114:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">var [const] GSL=Import("zklGSL"); // libGSL (GNU Scientific Library)
Z,pi,e := GSL.Z, (0.0).pi, (0.0).e;
 
println("e^(\u03c0i) + 1 = %s \u2245 0".fmt( Z(e).pow(Z(0,1)*pi) + 1 ));
println("TMI: ",(Z(e).pow(Z(0,1)*pi) + 1 ).format(0,25,"g"));</langsyntaxhighlight>
{{out}}
<pre>
10,333

edits