In other languages

Help the wiki!

The Scratch Wiki is made by and for Scratchers. Do you want to contribute?

Learn more about joining as an editor!

See discussions in the Community Portal

Solving Exponents

Solving exponents is the process of multiplying a number by itself multiple times. For example:

23 = 2 * 2 * 2 = 8

Many people want a block like this to make exponents easier to program:[1] (() ^ ():: operators)

Using the Method in Scratch

There are multiple ways to do exponents in Scratch. Here are two:

Repeat Method

Warning Note: this method can only be used with whole numbers

This script will be able to solve exponents in Scratch; however, it cannot calculate decimals:

when flag clicked
ask [What is the base number?] and wait
set [1st# v] to (answer)
ask [To what power?] and wait
set [2nd# v] to (answer)
set [ans v] to (1)
repeat ([abs v] of (2nd#))
set [ans v] to ((ans) * (1st#))
end
if <(2nd#) < [0]> then
set [ans v] to ((1) / (ans)) // a quick workaround for negative powers
end
say (join [The answer is: ] (ans)) for (2) secs

How it Works

  • The Variable "1st#" is the base number. This is the number that will be multiplied by.
  • The Variable "2nd#" determines how many times to repeat the multiplication.
  • The variable "ans" is the answer, which is the number 1 multiplied by "1st#", "2nd#" times.

Logarithmic Method

The logarithm method is much faster than the repeat method.

([10 ^ v] of ((power) * ([log v] of ([abs v] of (base)))))

or

([e ^ v] of ((power) * ([ln v] of ([abs v] of (base)))))

How it works

  • The variable "base" is the base and the variable "power" is the power, or the number of times the base is multiplied. The reported value is the answer.
  • The math works because n * log m = log mn and 10log mn = mn.

Special Cases

These are all errors, so it is advised to have cases for them:

  • The base is 0: Since log 0 is undefined, have an if-else that gives 0 for the answer if the base is 0, as long as the power is positive. The answer 1 should be given for 00 so that it does not give an error then.
  • The base is negative: If one wants to be able to do something such as xp where p is an integer, and they want to allow x to be negative, then the solution with logarithms will not work, because log(-1) is undefined (there is no solution to 10x = -1). Ways to solve this are:
    • Use the loop multiplication method, and even just use loop multiplication / division whenever the power is an integer.
    • Factor out the negative and find the answer for the absolute value of the exponent, then divide 1 by it if the exponent is negative. Also, its a good idea to use an if block for whether p is odd or even ( if p mod 2 = 0 then p is even).
set [result v] to ([abs v] of (base)) // used to spread out math over two lines
set [result v] to ([e^ v] of ((power)*([ln v] of (result)))::operators)
if<(base) < [0]> then
set [result v] to ((1) / (result))
end
Warning Note: Positive rational exponents, e.g. 10½ do work. Thus, this can be used to find N-roots of numbers.

Editing Scratch

Archive.png This article or section documents a feature not included in the current version of Scratch (2.0). It is only useful from a historical perspective.


A custom block can be made in Squeak which solves exponents. The relevant codes are:

('%n ^ %n' #r #exp:of:)
exp:t1 of:t2
^ t1 raisedTo: t2

References

  1. http://scratch.mit.edu/discuss/topic/15646/
  • This page was last modified on 27 April 2017, at 22:39.