TIP #123 Version 1.1: Adding an Exponentiation Operator to the [expr] Command

This is not necessarily the current version of this TIP.


TIP:123
Title:Adding an Exponentiation Operator to the [expr] Command
Version:$Revision: 1.1 $
Author:Arjen Markus <arjen dot markus at wldelft dot nl>
State:Draft
Type:Project
Tcl-Version:8.5
Vote:Pending
Created:Monday, 16 December 2002
Keywords:mathematics, evaluation

Abstract

This TIP proposes to add a new operator to the operators recognised by the [expr] command: the exponentiation operator. This operator will enhance the functionality of the current pow() function by returning a result that depends on the type of its operands. It will also make complicated formulae more readable.

Introduction

Currently Tcl's [expr] command uses the exponentiation function pow() to calculate such expressions as "2 to the power 10". The drawback of this is twofold:

* The result of raising an integer to an integer power is a double

2 to the power 10 is 1024.0, not 1024.

Other languages, like for instance FORTRAN, use an operator instead of a function. Two operators are commonly found: ** and ^. As the latter already has a meaning within the [expr] command, we propose to add the "**" operator instead. The above example would become:

 2.0*$x**3 - 1.2*$x**2 + 3.0*$x + 4.0

Mathematical Details

The implementation of the exponentiation operator will have the following properties (below we refer to the expression $x**$y):

If x and y are both integers (ordinary or wide):

If either x or y is a double, the C function pow() is used to compute the result.

The following expressions are parsed and evaluated in accordance with all other operators:

 $x ** $y ** $z ==> ($x ** $y ) ** $z
 $x ** -1       ==> ($x ** (-1))

The precedence of the exponentiation operator is thus higher than the multiplication, division and remainder operations and lower than the unary operations, in accordance with common definitions.

Copyright

This document is placed in the public domain.


Powered by TclThis is not necessarily the current version of this TIP.

TIP AutoGenerator - written by Donal K. Fellows