2

In MATLAB, there is a function named eps.

eps Spacing of floating point numbers. D = eps(X), is the positive distance from ABS(X) to the next larger in magnitude floating point number of the same precision as X. X may be either double precision or single precision. For all X, eps(X) is equal to eps(ABS(X)).

Is there an equivalent in Mathematica?

Edit:

eps, with no arguments, is the distance from 1.0 to the next larger double precision number, that is eps with no arguments returns 2^(-52).

eps('double') is the same as eps, or eps(1.0). eps('single') is the same as eps(single(1.0)), or single(2^-23).

Except for numbers whose absolute value is smaller than REALMIN,
if 2^E <= ABS(X) < 2^(E+1), then
eps(X) returns 2^(E-23) if ISA(X,'single')
eps(X) returns 2^(E-52) if ISA(X,'double')

For all X of class double such that ABS(X) <= REALMIN, eps(X)
returns 2^(-1074).   Similarly, for all X of class single such that
ABS(X) <= REALMIN('single'), eps(X) returns 2^(-149).

Replace expressions of the form
   if Y < eps * ABS(X)
with
   if Y < eps(X)

Example return values from calling eps with various inputs are
presented in the table below:

      Expression                   Return Value
     ===========================================
      eps(1/2)                     2^(-53)
      eps(1)                       2^(-52)
      eps(2)                       2^(-51)
      eps(realmax)                 2^971
      eps(0)                       2^(-1074)
      eps(realmin/2)               2^(-1074)
      eps(realmin/16)              2^(-1074)
      eps(Inf)                     NaN
      eps(NaN)                     NaN
     -------------------------------------------
      eps(single(1/2))             2^(-24)
      eps(single(1))               2^(-23)
      eps(single(2))               2^(-22)
      eps(realmax('single'))       2^104
      eps(single(0))               2^(-149)
      eps(realmin('single')/2)    2^(-149)
      eps(realmin('single')/16)   2^(-149)
      eps(single(Inf))             single(NaN)
      eps(single(NaN))             single(NaN)
J. M.'s missing motivation
  • 124,525
  • 11
  • 401
  • 574
diverger
  • 407
  • 1
  • 4
  • 12

2 Answers2

2

Ulp is a equivalent function in Mathemtica,you need Needs["ComputerArithmetic`"] first

Needs["ComputerArithmetic`"]
ComputerArithmetic`Ulp[1]

1.11022*10^-16

Of course,we can plot it

Plot[ComputerArithmetic`Ulp[x], {x, -10, 10}]

yode
  • 26,686
  • 4
  • 62
  • 167
2

I don't believe there is a directly equivalent function in Mathematica. However, as you comment, $MachineEpsilon (with a $ character) gives the value of eps.

$MachineEpsilon

2.22045*10^-16

If you look at the Examples > Applications section of the documentation linked you'll see that eps(x) could be defined in Mathematica as:

eps[x_:1] := x $MachineEpsilon

See also this answer to the somewhat related "Issues with $MachineEpsilon" question.

MikeLimaOscar
  • 3,456
  • 17
  • 29