Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Determine the machine precision in Matlab

  1. Apr 27, 2005 #1
    hi, how to determine the machine precision in matlab and estimate from this how many bits are used in the mantissa ??
  2. jcsd
  3. Apr 28, 2005 #2


    User Avatar
    Staff Emeritus
    Science Advisor
    Education Advisor

    OK, since no one tackled this, I will.

    This is not restricted to just using Matlab, but I think you can write your own routine in matlab.

    The common way of determining machine precision (some call it the machine epsilon) is the figure out when a mathematical operation hasn't changed when two different numbers are used that only differ by a very small amount (thus the term machine "epsilon"). For example, write a routine like this:

    1. x = 1.0
    2. x = (x/2) + 1.0
    3. If x > 1.0, go do (2) again

    It will continue to do the loop until x is small enough that when you add it to 1.0, the machine no longer sees it as any different than 1.0. Try this with a few times with x defined with several different precision. The smallest value of x upon exiting the loop is your machine epsilon.

    Now, what is interesting also is that you MAY get a different value for the machine epsilon if you do this instead:

    1. x = 1.0
    2. x = x/2
    3. If x > 0, go do (2) again

    At first glance, there shouldn't be any different between these two routines, but it depends on how the machine or register compares a value with the value "0". You get a smaller machine epsilon using this routine. However, I don't think this is a safe lower limit to use, since most of the time, you are actually doing mathematical operations. So the earlier machine epsilon will be the one to trust.

  4. Apr 28, 2005 #3
    in MatLab you can simply type:
    eps <enter>
  5. May 2, 2005 #4
    Thanks ZapperZ for showing me this method!

    However I think the first algorithm has a small error. The sequence approaches 2.0

    On iteration
    1 x = 1.5
    2 x = 1.75
    3 x = 1.875

    So I think the algorithm should be recoded as
    1. x = 1.0
    2. x = (x/2) + 1.0
    3. If x < 2.0, go do (2) again

    Incidentally, I coded both algorithms in C and ran them on my P4.
    Algorithm 1 ran for 24 iterations and algorithm 2 ran for 150 iterations with floats, and 53 and 1075 (!) for doubles.

    So you were right, the compare to zero is much more accurate in floating point math.

    Also, on my machine, matlab R14 produces

    >> eps

    ans =


    which corresponds to the algorithm 1 double answer obtained from the C program.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook