R: Checks if a value is (close to) zero or not

isZero {R.utils} | R Documentation

## Checks if a value is (close to) zero or not

### Description

Checks if a value (or a vector of values) is (close to) zero or not where "close" means if the absolute value is less than `neps*eps`. Note that `x == 0` will not work in all cases.

By default `eps` is the smallest possible floating point value that can be represented by the running machine, i.e. `.Machine$double.eps` and `neps` is one. By changing `neps` it is easy to adjust how close to zero "close" means without having to know the machine precision (or remembering how to get it).

### Usage

    ## Default S3 method:
    isZero(x, neps=1, eps=.Machine$double.eps, ...)

### Arguments

`x` | A `vector` of values.
`eps` | The smallest possible floating point.
`neps` | A scale factor of `eps` specifying how close to zero "close" means. If `eps` is the smallest value such that `1 + eps != 1`, i.e. `.Machine$double.eps`, `neps` must be greater or equal to one.
`...` | Not used.

### Value

Returns a `logical` `vector` indicating if the elements are zero or not.

### Author(s)

Henrik Bengtsson

### See Also

`all.equal`(). `Comparison`. `.Machine`.

### Examples

    x <- 0
    print(x == 0)      # TRUE
    print(isZero(x))   # TRUE

    x <- 1
    print(x == 0)      # FALSE
    print(isZero(x))   # FALSE

    x <- .Machine$double.eps
    print(x == 0)      # FALSE
    print(isZero(x))   # FALSE

    x <- 0.9*.Machine$double.eps
    print(x == 0)      # FALSE
    print(isZero(x))   # TRUE

    # From help(Comparisions)
    x1 <- 0.5 - 0.3
    x2 <- 0.3 - 0.1
    print(x1 - x2)
    print(x1 == x2)                           # FALSE on most machines
    print(identical(all.equal(x1, x2), TRUE)) # TRUE everywhere
    print(isZero(x1-x2))                      # TRUE everywhere

[Package R.utils version 2.7.0 Index]