isSafeInteger

Test if a finite double-precision floating-point number is a safe integer.

Usage

var isSafeInteger = require( '@stdlib/math/base/assert/is-safe-integer' );

isSafeInteger( x )

Tests if a finite double-precision floating-point number is a safe integer.

var bool = isSafeInteger( 1.0 );
// returns true

Notes

  • An integer valued number is "safe" when the number can be exactly represented as a double-precision floating-point number. For example,

    var MAX_SAFE_INTEGER = require( '@stdlib/constants/float64/max-safe-integer' );
    // returns 9007199254740991
    
    var x = 9007199254740992;
    // returns 9007199254740992
    
    var y = 9007199254740993;
    // returns 9007199254740992
    
    var bool = ( x === y );
    // returns true
    

    In this example, x and y should be distinct, but they are not due to constraints imposed by storing numeric values in double-precision floating-point format. "Safe" integers are thus double-precision floating-point numbers having integer values with unequivocal binary representations.

Examples

var isSafeInteger = require( '@stdlib/math/base/assert/is-safe-integer' );

var bool = isSafeInteger( -5.0 );
// returns true

bool = isSafeInteger( 2.0e200 );
// returns false

bool = isSafeInteger( 3.14 );
// returns false

bool = isSafeInteger( NaN );
// returns false

C APIs

Usage

#include "stdlib/math/base/assert/is_safe_integer.h"

stdlib_base_is_safe_integer( x )

Tests if a finite double-precision floating-point number is a safe integer.

#include <stdbool.h>

bool out = stdlib_base_is_safe_integer( 3.0 );
// returns true

out = stdlib_base_is_safe_integer( 2.0e200 );
// returns false

The function accepts the following arguments:

  • x: [in] double input value.
bool stdlib_base_is_safe_integer( const double x );

Examples

#include "stdlib/math/base/assert/is_safe_integer.h"
#include <stdio.h>
#include <stdbool.h>

int main( void ) {
    const double x[] = { 5.0, -5.0, 3.14, -3.14, 0.0, 0.0/0.0 };

    bool b;
    int i;
    for ( i = 0; i < 6; i++ ) {
        b = stdlib_base_is_safe_integer( x[ i ] );
        printf( "Value: %lf. Is safe integer? %s.\n", x[ i ], ( b ) ? "True" : "False" );
    }
}
Did you find this page helpful?