Zero to the zero power: Difference between revisions
(→{{header|Julia}}: A new entry for Julia) |
No edit summary |
||
Line 524: | Line 524: | ||
{{out}} |
{{out}} |
||
<pre>1</pre> |
<pre>1</pre> |
||
=={{header|PicoLisp}}== |
|||
<lang PicoLisp> |
|||
(** 0 0) |
|||
</lang> |
|||
{{out}} |
|||
1 |
|||
=={{header|PL/I}}== |
=={{header|PL/I}}== |
||
<lang pli> zhz: Proc Options(Main); |
<lang pli> zhz: Proc Options(Main); |
Revision as of 15:06, 9 May 2015
You are encouraged to solve this task according to the task description, using any language you may know.
Some programming languages are not exactly consistent (with other programming languages) when raising zero to the zeroth power: .
- Task requirements
Show the results of raising zero to the zeroth power.
If your computer language objects to 0**0
at compile time,
you may also try something like:
<lang rexx>x = 0
y = 0
z = x**y
say 'z=' z</lang>
Show the result here.
And of course use any symbols or notation that is supported in your computer language for exponentiation.
- See also
- The Wiki entry: Zero to the power of zero.
- The Wiki entry: History of differing points of view.
- The MathWorld™ entry: exponent laws.
- Also, in the above MathWorld™ entry, see formula (9): .
- The OEIS entry: The special case of zero to the zeroth power
8th
<lang forth> 0 0 ^ . </lang>
- Output:
1
AutoHotkey
<lang AutoHotkey>MsgBox % 0 ** 0</lang>
- Output:
1
Ada
<lang Ada>with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Long_Integer_Text_IO,
Ada.Long_Long_Integer_Text_IO, Ada.Float_Text_IO, Ada.Long_Float_Text_IO, Ada.Long_Long_Float_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Long_Integer_Text_IO,
Ada.Long_Long_Integer_Text_IO, Ada.Float_Text_IO, Ada.Long_Float_Text_IO, Ada.Long_Long_Float_Text_IO;
procedure Test5 is
I : Integer := 0; LI : Long_Integer := 0; LLI : Long_Long_Integer := 0; F : Float := 0.0; LF : Long_Float := 0.0; LLF : Long_Long_Float := 0.0; Zero : Natural := 0;
begin
Put ("Integer 0^0 = "); Put (I ** Zero, 2); New_Line; Put ("Long Integer 0^0 = "); Put (LI ** Zero, 2); New_Line; Put ("Long Long Integer 0^0 = "); Put (LLI ** Zero, 2); New_Line; Put ("Float 0.0^0 = "); Put (F ** Zero); New_Line; Put ("Long Float 0.0^0 = "); Put (LF ** Zero); New_Line; Put ("Long Long Float 0.0^0 = "); Put (LLF ** Zero); New_Line;
end Test5; </lang>
- Output:
Integer 0^0 = 1 Long Integer 0^0 = 1 Long Long Integer 0^0 = 1 Float 0.0^0 = 1.00000E+00 Long Float 0.0^0 = 1.00000000000000E+00 Long Long Float 0.0^0 = 1.00000000000000000E+00
ALGOL 68
<lang algol68>print( ( 0 ^ 0, newline ) ) </lang>
- Output:
+1
Applesoft BASIC
]? 0^0 1
AWK
<lang AWK>
- syntax: GAWK -f ZERO_TO_THE_ZERO_POWER.AWK
BEGIN {
print(0 ^ 0) exit(0)
} </lang>
- Output:
1
Bc
0 ^ 0 1
Bracmat
<lang bracmat>0^0</lang>
- Output:
1
C
This example uses the standard pow
function in the math library.
0^0 is given as 1.
<lang c>#include <stdio.h>
- include <math.h>
- include <complex.h>
int main() { printf("0 ^ 0 = %f\n", pow(0,0));
double complex c = cpow(0,0);
printf("0+0i ^ 0+0i = %f+%fi\n", creal(c), cimag(c)); return 0; }</lang>
- Output:
0 ^ 0 = 1.000000 0+0i ^ 0+0i = nan+nani
C++
<lang cpp>#include <iostream>
- include <cmath>
- include <complex>
int main() {
std::cout << "0 ^ 0 = " << std::pow(0,0) << std::endl; std::cout << "0+0i ^ 0+0i = " << std::pow(std::complex<double>(0),std::complex<double>(0)) << std::endl; return 0;
}</lang>
- Output:
0 ^ 0 = 1 0+0i ^ 0+0i = (nan,nan)
C#
<lang csharp>using System;
namespace ZeroToTheZeroeth {
class Program { static void Main(string[] args) { double k = Math.Pow(0, 0); Console.WriteLine("0^0"); Console.WriteLine(k.ToString()); } }
}</lang>
- Output:
0^0 1
Clojure
user=> (use 'clojure.math.numeric-tower) user=> (expt 0 0) 1 ; alternative java-interop route: user=> (Math/pow 0 0) 1.0
Common Lisp
> (expt 0 0) 1
D
<lang d>void main() {
import std.stdio, std.math, std.bigint, std.complex;
writeln("Int: ", 0 ^^ 0); writeln("Ulong: ", 0UL ^^ 0UL); writeln("Float: ", 0.0f ^^ 0.0f); writeln("Double: ", 0.0 ^^ 0.0); writeln("Real: ", 0.0L ^^ 0.0L); writeln("pow: ", pow(0, 0)); writeln("BigInt: ", 0.BigInt ^^ 0); writeln("Complex: ", complex(0.0, 0.0) ^^ 0);
}</lang>
- Output:
Int: 1 Ulong: 1 Float: 1 Double: 1 Real: 1 pow: 1 BigInt: 1 Complex: 1+0i
Eiffel
<lang Eiffel>print (0^0)</lang>
- Output:
1
ERRE
<lang ERRE> ..... PRINT(0^0) ..... </lang>
- Output:
1
Factor
<lang factor>USING: math.functions.private ; ! ^complex 0 0 ^ C{ 0 0 } C{ 0 0 } ^complex</lang>
- Output:
--- Data stack: NAN: 8000000000000 C{ NAN: 8000000000000 NAN: 8000000000000 }
Forth
<lang forth>0e 0e f** f.</lang>
- Output:
1.
Fortran
<lang Fortran> program zero double precision :: i, j double complex :: z1, z2 i = 0.0D0 j = 0.0D0 z1 = (0.0D0,0.0D0) z2 = (0.0D0,0.0D0) write(*,*) 'When integers are used, we have 0^0 = ', 0**0 write(*,*) 'When double precision numbers are used, we have 0.0^0.0 = ', i**j write(*,*) 'When complex numbers are used, we have (0.0+0.0i)^(0.0+0.0i) = ', z1**z2 end program </lang>
- Output:
When integers are used, we have 0^0 = 1 When double precision numbers are used, we have 0.0^0.0 = 1.0000000000000000 When complex numbers are used, we have (0.0+0.0i)^(0.0+0.0i) = ( NaN, NaN)
Go
Go does not have an exponentiation operator but has functions in the standard library for three types, float64, complex128, and big.Int. As of Go 1.3, all are documented to return 1. <lang go>package main
import (
"fmt" "math" "math/big" "math/cmplx"
)
func main() {
fmt.Println("float64: ", math.Pow(0, 0)) var b big.Int fmt.Println("big integer:", b.Exp(&b, &b, nil)) fmt.Println("complex: ", cmplx.Pow(0, 0))
}</lang>
- Output:
float64: 1 big integer: 1 complex: (1+0i)
Groovy
Test: <lang groovy>println 0**0</lang>
- Output:
1
Haskell
<lang haskell>import Data.Complex
main = do
print $ 0 ^ 0 print $ 0.0 ^ 0 print $ 0 ^^ 0 print $ 0 ** 0 print $ (0 :+ 0) ^ 0 print $ (0 :+ 0) ** (0 :+ 0)</lang>
- Output:
1 1.0 1.0 1.0 1.0 :+ 0.0 NaN :+ NaN
Icon and Unicon
"Works" in both languages: <lang unicon>procedure main()
write(0^0)
end</lang>
- Output:
->z2z Run-time error 204 File z2z.icn; Line 2 real overflow, underflow, or division by zero Traceback: main() {0 ^ 0} from line 2 in z2z.icn ->
J
<lang j> 0 ^ 0 1</lang>
Java
<lang java>System.out.println(Math.pow(0, 0));</lang>
- Output:
1.0
JavaScript
In interactive mode: <lang javascript>> Math.pow(0, 0); 1</lang>
Julia
Try all combinations of complex, float, rational, integer and boolean. <lang Julia> zs = Any[zero(Complex),
zero(FloatingPoint), zero(Rational), zero(Integer), zero(Bool)]
for i in zs, j in zs
println(i, "^", j, " = ", i^j, " (", typeof(i^j), ")")
end
</lang>
Note that if zs
is not annotated as being of type Any
all of the zeros will be promoted to complex when zs
is constructed.
- Output:
0 + 0im^0 + 0im = 1.0 + 0.0im (Complex{Float64}) 0 + 0im^0.0 = 1.0 + 0.0im (Complex{Float64}) 0 + 0im^0//1 = 1.0 + 0.0im (Complex{Float64}) 0 + 0im^0 = 1 + 0im (Complex{Int64}) 0 + 0im^false = 1 + 0im (Complex{Int64}) 0.0^0 + 0im = 1.0 + 0.0im (Complex{Float64}) 0.0^0.0 = 1.0 (Float64) 0.0^0//1 = 1.0 (Float64) 0.0^0 = 1.0 (Float64) 0.0^false = 1.0 (Float64) 0//1^0 + 0im = 1.0 + 0.0im (Complex{Float64}) 0//1^0.0 = 1.0 (Float64) 0//1^0//1 = 1.0 (Float64) 0//1^0 = 1//1 (Rational{Int64}) 0//1^false = 1//1 (Rational{Int64}) 0^0 + 0im = 1.0 + 0.0im (Complex{Float64}) 0^0.0 = 1.0 (Float64) 0^0//1 = 1.0 (Float64) 0^0 = 1 (Int64) 0^false = 1 (Int64) false^0 + 0im = 1.0 + 0.0im (Complex{Float64}) false^0.0 = 1.0 (Float64) false^0//1 = 1.0 (Float64) false^0 = true (Bool) false^false = true (Bool)
Maple
<lang Maple>0^0</lang>
- Output:
1
However, for consistency with IEEE-754 numerics, we also have a NaN result for the equivalent floating-point exponentiation: <lang Maple>0^0.0</lang>
- Output:
Float(undefined)
Mathematica
<lang Mathematica>0^0</lang>
- Output:
Indeterminate
Mercury
<lang Mercury>:- module zero_to_the_zero_power.
- - interface.
- - import_module io.
- - pred main(io::di, io::uo) is det.
- - implementation.
- - import_module float, int, integer, list, string.
main(!IO) :-
io.format(" int.pow(0, 0) = %d\n", [i(pow(0, 0))], !IO), io.format("integer.pow(zero, zero) = %s\n", [s(to_string(pow(zero, zero)))], !IO), io.format(" float.pow(0.0, 0) = %.1f\n", [f(pow(0.0, 0))], !IO).
- - end_module zero_to_the_zero_power.</lang>
- Output:
int.pow(0, 0) = 1 integer.pow(zero, zero) = 1 float.pow(0.0, 0) = 1.0
МК-61/52
<lang>Сx ^ x^y С/П</lang>
The result is error message.
NetRexx
<lang netrexx>x=0 Say '0**0='||x**x</lang>
- Output:
0**0=1
Nim
<lang nim>import math
echo pow(0, 0)</lang>
- Output:
1.0000000000000000e+00
OCaml
In the interpreter:
# 0.0 ** 0.0;; - : float = 1. # Complex.pow Complex.zero Complex.zero;; - : Complex.t = {Complex.re = nan; Complex.im = nan} # #load "nums.cma";; # open Num;; # Int 0 **/ Int 0;; - : Num.num = Int 1
Oforth
<lang Oforth>0 0 pow println</lang>
- Output:
1
ooRexx
<lang oorexx>/**********************************************************************
- 21.04.2014 Walter Pachl
- /
Say 'rxCalcpower(0,0) ->' rxCalcpower(0,0) Say '0**0 ->' 0**0
- requires rxmath library</lang>
- Output:
rxCalcpower(0,0) -> 1 0**0 -> 1
PARI/GP
<lang parigp>0^0</lang>
- Output:
%1 = 1
Pascal
<lang Pascal>program ZToZ; uses
math;
begin
write('0.0 ^ 0 :',IntPower(0.0,0):4:2); writeln(' 0.0 ^ 0.0 :',Power(0.0,0.0):4:2);
end.</lang>
- output
0.0 ^ 0 :1.00 0.0 ^ 0.0 :1.00
Perl
<lang perl>print 0 ** 0, "\n";
use Math::Complex;
print cplx(0,0) ** cplx(0,0), "\n";</lang>
- Output:
1 1
Perl 6
Translation of REXX.
<lang perl 6>say '0 ** 0 (zero to the zeroth power) ───► ', 0**0</lang>
- Output:
0 ** 0 (zero to the zeroth power) ───► 1
PHP
<lang PHP><?php echo pow(0,0);</lang>
- Output:
1
PicoLisp
<lang PicoLisp> (** 0 0) </lang>
- Output:
1
PL/I
<lang pli> zhz: Proc Options(Main);
Dcl a dec float(10) Init(1); Dcl b dec float(10) Init(0); Put skip list('1**0=',a**b); Put skip list('0**1=',b**a); Put skip list('0**0=',b**b); End;</lang>
- Output:
1**0= 1.000000000E+0000 0**1= 0.000000000E+0000 0**0= IBM0682I ONCODE=1553 X in EXPONENT(X) was invalid. At offset +0000025B in procedure with entry ZHZ
PowerShell
<lang PowerShell>[math]::pow(0,0)</lang>
Python
<lang python>from decimal import Decimal from fractions import Fraction for n in (Decimal(0), Fraction(0, 1), complex(0), float(0), int(0)): try: n1 = n**n except: n1 = '<Raised exception>' try: n2 = pow(n, n) except: n2 = '<Raised exception>' print('%8s: ** -> %r; pow -> %r' % (n.__class__.__name__, n1, n2))</lang>
- Output:
Decimal: ** -> '<Raised exception>'; pow -> '<Raised exception>' Fraction: ** -> Fraction(1, 1); pow -> Fraction(1, 1) complex: ** -> (1+0j); pow -> (1+0j) float: ** -> 1.0; pow -> 1.0 int: ** -> 1; pow -> 1
Racket
<lang racket>#lang racket
- as many zeros as I can think of...
(define zeros (list
0 ; unspecified number type 0. ; hinted as float #e0 ; explicitly exact #i0 ; explicitly inexact 0+0i ; exact complex 0.+0.i ; float inexact ))
(for*((z zeros) (p zeros))
(printf "(~a)^(~a) = ~s~%" z p (with-handlers [(exn:fail:contract:divide-by-zero? exn-message)] (expt z p))))</lang>
- Output:
(0)^(0) = 1 (0)^(0.0) = 1.0 (0)^(0) = 1 (0)^(0.0) = 1.0 (0)^(0) = 1 (0)^(0.0+0.0i) = "expt: undefined for 0 and 0.0+0.0i" (0.0)^(0) = 1 (0.0)^(0.0) = 1.0 (0.0)^(0) = 1 (0.0)^(0.0) = 1.0 (0.0)^(0) = 1 (0.0)^(0.0+0.0i) = +nan.0+nan.0i (0)^(0) = 1 (0)^(0.0) = 1.0 (0)^(0) = 1 (0)^(0.0) = 1.0 (0)^(0) = 1 (0)^(0.0+0.0i) = "expt: undefined for 0 and 0.0+0.0i" (0.0)^(0) = 1 (0.0)^(0.0) = 1.0 (0.0)^(0) = 1 (0.0)^(0.0) = 1.0 (0.0)^(0) = 1 (0.0)^(0.0+0.0i) = +nan.0+nan.0i (0)^(0) = 1 (0)^(0.0) = 1.0 (0)^(0) = 1 (0)^(0.0) = 1.0 (0)^(0) = 1 (0)^(0.0+0.0i) = "expt: undefined for 0 and 0.0+0.0i" (0.0+0.0i)^(0) = 1 (0.0+0.0i)^(0.0) = 1.0+0.0i (0.0+0.0i)^(0) = 1 (0.0+0.0i)^(0.0) = 1.0+0.0i (0.0+0.0i)^(0) = 1 (0.0+0.0i)^(0.0+0.0i) = +nan.0+nan.0i
REXX
<lang rexx>/*REXX program shows the results of raising zero to the zeroth power.*/
say '0 ** 0 (zero to the zeroth power) ───► ' 0**0</lang>
using PC/REXX
using Personal REXX
using REGINA
using ooRexx
- Output:
0 ** 0 (zero to the zeroth power) ───► 1
using R4
- Output:
Error 26 : Invalid whole number (SYNTAX) Information: 0 ** 0 is undefined Error occurred in statement# 2 Statement source: say '0 ** 0 (zero to the zeroth power) ───► ' 0**0 Statement context: C:\ZERO_TO0.REX, procedure: ZERO_TO0
using ROO
- Output:
Error 26 : Invalid whole number (SYNTAX) Information: 0 ** 0 is undefined Error occurred in statement# 2 Statement source: say '0 ** 0 (zero to the zeroth power) ───► ' 0**0 Statement context: C:\ZERO_TO0.REX, procedure: ZERO_TO0
Ruby
<lang ruby>require 'bigdecimal'
[0, 0.0, Complex(0), Rational(0), BigDecimal.new("0")].each do |n|
printf "%10s: ** -> %s\n" % [n.class, n**n]
end</lang>
- Output:
Fixnum: ** -> 1 Float: ** -> 1.0 Complex: ** -> 1+0i Rational: ** -> 1/1 BigDecimal: ** -> 0.1E1
Rust
<lang Rust>use std::num::Int;
fn main() {
println!("{}", 0i.pow(0));
}</lang>
- Output:
1
Scala
<lang Scala> assert(math.pow(0, 0) == 1, "Scala blunder, should go back to school !")</lang>
Scheme
<lang scheme>(display (expt 0 0)) (newline) (display (expt 0.0 0.0)) (newline) (display (expt 0+0i 0+0i)) (newline)</lang>
- Output:
1 1.0 1.0
Seed7
<lang seed7>$ include "seed7_05.s7i";
include "float.s7i"; include "complex.s7i";
const proc: main is func
begin writeln("0 ** 0 = " <& 0 ** 0); writeln("0.0 ** 0 = " <& 0.0 ** 0); writeln("0.0 ** 0.0 = " <& 0.0 ** 0.0); writeln("0.0+0i ** 0 = " <& complex(0.0) ** 0); end func;
</lang>
- Output:
0 ** 0 = 1 0.0 ** 0 = 1.0 0.0 ** 0.0 = 1.0 0.0+0i ** 0 = 1.0+0.0i
Smalltalk
<lang smalltalk> 0 raisedTo: 0 0.0 raisedTo: 0.0 </lang>
- Output:
1 1.0
Standard ML
In the interpreter:
- Math.pow (0.0, 0.0); val it = 1.0 : real
Swift
<lang swift>import Darwin println(pow(0.0,0.0))</lang>
- Output:
1.0
Tcl
Interactively… <lang tcl>% expr 0**0 1 % expr 0.0**0.0 1.0</lang>
zkl
<lang zkl>(0.0).pow(0) //--> 1.0 var BN=Import("zklBigNum"); // big ints BN(0).pow(0) //--> 1</lang>
- Programming Tasks
- Solutions by Programming Task
- 8th
- AutoHotkey
- Ada
- ALGOL 68
- Applesoft BASIC
- AWK
- Bc
- Bracmat
- C
- C++
- C sharp
- Clojure
- Common Lisp
- D
- Eiffel
- ERRE
- Factor
- Forth
- Fortran
- Go
- Groovy
- Haskell
- Icon
- Unicon
- J
- Java
- JavaScript
- Julia
- Maple
- Mathematica
- Mercury
- МК-61/52
- NetRexx
- Nim
- OCaml
- Oforth
- OoRexx
- PARI/GP
- Pascal
- Math
- Perl
- Perl 6
- PHP
- PicoLisp
- PL/I
- PowerShell
- Python
- Racket
- REXX
- Ruby
- Rust
- Scala
- Scheme
- Seed7
- Smalltalk
- Standard ML
- Swift
- Tcl
- Zkl