README.md (3730B)
1 <!-- 2 3 @license Apache-2.0 4 5 Copyright (c) 2018 The Stdlib Authors. 6 7 Licensed under the Apache License, Version 2.0 (the "License"); 8 you may not use this file except in compliance with the License. 9 You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13 Unless required by applicable law or agreed to in writing, software 14 distributed under the License is distributed on an "AS IS" BASIS, 15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 See the License for the specific language governing permissions and 17 limitations under the License. 18 19 --> 20 21 # isSafeInteger 22 23 > Test if a value is a number having a safe integer value. 24 25 <section class="usage"> 26 27 ## Usage 28 29 ```javascript 30 var isSafeInteger = require( '@stdlib/assert/is-safe-integer' ); 31 ``` 32 33 #### isSafeInteger( value ) 34 35 Tests if a value is a `number` having a safe `integer` value. 36 37 <!-- eslint-disable no-new-wrappers --> 38 39 ```javascript 40 var Number = require( '@stdlib/number/ctor' ); 41 42 var bool = isSafeInteger( 5.0 ); 43 // returns true 44 45 bool = isSafeInteger( new Number( 5.0 ) ); 46 // returns true 47 48 bool = isSafeInteger( 2.0e200 ); 49 // returns false 50 51 bool = isSafeInteger( -3.14 ); 52 // returns false 53 54 bool = isSafeInteger( null ); 55 // returns false 56 ``` 57 58 #### isSafeInteger.isPrimitive( value ) 59 60 Tests if a `value` is a primitive `number` having a safe `integer` value. 61 62 <!-- eslint-disable no-new-wrappers --> 63 64 ```javascript 65 var Number = require( '@stdlib/number/ctor' ); 66 67 var bool = isSafeInteger.isPrimitive( -3.0 ); 68 // returns true 69 70 bool = isSafeInteger.isPrimitive( new Number( -3.0 ) ); 71 // returns false 72 ``` 73 74 #### isSafeInteger.isObject( value ) 75 76 Tests if a `value` is a `Number` object having a safe `integer` value. 77 78 <!-- eslint-disable no-new-wrappers --> 79 80 ```javascript 81 var Number = require( '@stdlib/number/ctor' ); 82 83 var bool = isSafeInteger.isObject( 3.0 ); 84 // returns false 85 86 bool = isSafeInteger.isObject( new Number( 3.0 ) ); 87 // returns true 88 ``` 89 90 </section> 91 92 <!-- /.usage --> 93 94 <section class="notes"> 95 96 ## Notes 97 98 - An integer valued number is "safe" when the number can be exactly represented as a [double-precision floating-point number][ieee754]. For example, 99 100 ```javascript 101 var MAX_SAFE_INTEGER = require( '@stdlib/constants/float64/max-safe-integer' ); 102 // returns 9007199254740991 103 104 var x = 9007199254740992; 105 // returns 9007199254740992 106 107 var y = 9007199254740993; 108 // returns 9007199254740992 109 110 var bool = ( x === y ); 111 // returns true 112 ``` 113 114 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][ieee754]. "Safe" integers are thus [double-precision floating-point numbers][ieee754] having integer values with unequivocal binary representations. 115 116 </section> 117 118 <!-- /.notes --> 119 120 <section class="examples"> 121 122 ## Examples 123 124 <!-- eslint-disable no-new-wrappers --> 125 126 <!-- eslint no-undef: "error" --> 127 128 ```javascript 129 var Number = require( '@stdlib/number/ctor' ); 130 var isSafeInteger = require( '@stdlib/assert/is-safe-integer' ); 131 132 var bool = isSafeInteger( -5.0 ); 133 // returns true 134 135 bool = isSafeInteger( 0.0 ); 136 // returns true 137 138 bool = isSafeInteger( new Number( 5.0 ) ); 139 // returns true 140 141 bool = isSafeInteger( 2.0e200 ); 142 // returns false 143 144 bool = isSafeInteger( 5.256 ); 145 // returns false 146 147 bool = isSafeInteger( 1.0/0.0 ); 148 // returns false 149 150 bool = isSafeInteger( -1.0/0.0 ); 151 // returns false 152 153 bool = isSafeInteger( NaN ); 154 // returns false 155 156 bool = isSafeInteger( '5' ); 157 // returns false 158 159 bool = isSafeInteger( null ); 160 // returns false 161 ``` 162 163 </section> 164 165 <!-- /.examples --> 166 167 <section class="links"> 168 169 [ieee754]: https://en.wikipedia.org/wiki/IEEE_754-1985 170 171 </section> 172 173 <!-- /.links -->