Infinity 和 -Infinity
认识 Infinity
在 JavaScript 中超出 1.797693134862315E+308 的数值即为 Infinity,小于 -1.797693134862316E+308 的数值为无穷小。
2^n
,其中 n 的取值范围是:(-1075, 1024)
。如果 n 大于等于 1024,则指数的结果为 Infinity;如果 n 小于等于 -1075,则指数的结果为 0。
Math.pow(2, 1024); // Infinity
Math.pow(2, -1075); // 0
Math.pow(2, -1074); // 5e-324
当一个数被 0 除的时候会产生一个错误值 Infinity:
3 / 0 // Infinity
3 / -0 // -Infinity
针对于上面出现的情况,在实际开发中要排除 Infinity。全局函数 isFinite()
可以检测一个值是否是实际的值(既不是 Infinity 也不是 NaN):
isFinite(-Infinity); // false
isFinite(Infinity); // false
isFinite(NaN); // false
isFinite(55); // true
实际运用
查找最大值
在数组中查找最大值,比较前一个数组元素是否大于第二个数组元素,如果大于,那么前一个数组元素可能是最大的,所以,currMax = nums[i]
;如果前一个数组元素小于后一个数组元素,那么前一个数组元素就不是最大值,然后重复比较步骤:
function findMaxNum(nums) {
let currMax = 0;
for (let i = 0; i < nums.length; i++) {
if (i + 1 > nums.length) {
return currMax;
}
if (currMax === 0) {
if (nums[i] > nums[i + 1]) {
currMax = nums[i];
}
} else {
if (nums[i] > currMax) {
currMax = nums[i];
}
}
}
return currMax;
}
这里使用的 for 语句下表取值的方式查找最大值,可以通过下标取得当前下一个元素,初始值可以设置成 max。但是,对于 for...of... 语句来说,不适用,需要用一个默认值来填充,所以-Infinity
是最合适的,因为是无穷小,比任何数字都小。
function findMaxNum(nums) {
let currMax = -Infinity;
for (let n of nums) {
if (n > currMax) {
currMax = n;
}
}
return currMax;
}
查找最小值
在数组中查找最小值,比较前一个数组元素是否小于后一个数组元素,如果小于,那么当前最小值currMin
就是第一个数组元素;如果第一个数组元素大于后一个数组元素,说明第一个数组元素不是最小的,就不给currMin
赋值,然后重复比较步骤:
function findMinNum(nums) {
let currMin = 0;
for (let i = 0; i < nums.length; i++) {
if (i + 1 > nums.length) {
return currMin;
}
if (currMin === 0) {
if (nums[i] < nums[i + 1]) {
currMin = nums[i];
}
} else {
if (nums[i] < currMin) {
currMin = nums[i];
}
}
}
return currMin;
}
同样的,可以跟上面一样,用更加简洁的办法来查找最小值。Infinity
代表无穷大,无论如何数组元素都不可能大于Infinity
,所以,第一个元素不管是多少,都被默认认定是最小值,然后重复上面的比较,元素小于currMin
,就说明这个元素有可能是最小值,否则重复比较:
function findMinNum(nums) {
let currMin = Infinity;
for (const n of nums) {
if (n < currMin) {
currMin = n;
}
}
return currMin;
}
在第三行打印当前循环的元素和 currMin,观察比较过程:
Infinity 和 -Infinity的更多相关文章
- Infinity、-Infinity和NaN
首先看看这三个代表什么: Infinity:正无穷大 -Infinity:负无穷大 NaN:Not a Number 当float或double类型的数除零时, 当被除数为非零值时,结果为无穷大 当被 ...
- java中比较特殊的三个浮点数Infinity、-Infinity、NaN
学过javaScript的应该都知道,在js中的数值型number类型中有几个特殊的数,一个正无穷大.一个负无穷大.一个不是一个数NaN. 后来无意中发现java中也有这三个数,不过这三个数是浮点数, ...
- C#中的Infinity有个小坑
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...
- NaN 和 Infinity
using Fasterflect; using System; using System.Collections.Generic; using System.Linq; using System.R ...
- js cookie设置最大过期时间 Infinity
Note: 对于永久cookie我们用了Fri, 31 Dec 9999 23:59:59 GMT作为过期日.如果你不想使用这个日期,可使用世界末日Tue, 19 Jan 2038 03:14:07 ...
- C#中的Infinity和NaN
C#中double和float类型有两个特殊值: Infinity(无穷大):5.0 / 0.0 = Infinity NaN(not a number):0.0 / 0.0 = NaN 计算表达式 ...
- js Infinity 属性
Infinity 属性用于存放表示正无穷大的数值. 说明 无法使用 for/in 循环来枚举 Infinity 属性,也不能用 delete 运算符来删除它. Infinity 不是常量,可以把它设置 ...
- Codeforces Round #485 (Div. 2) A. Infinity Gauntlet
Codeforces Round #485 (Div. 2) A. Infinity Gauntlet 题目连接: http://codeforces.com/contest/987/problem/ ...
- depth: working copy\infinity\immediates\files\empty
depth: working copy\infinity\immediates\files\empty 有时间,需要整理下,svn 合并深度这四项:具体的意思.
- Dividing Infinity - Distributed Partitioning Schemes
This is the second post in a series discussing the architecture and implementation of massively para ...
随机推荐
- 【每日一题】【与运算判断奇偶】【list的重载前后插入】2021年11月25日-103. 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 [3,9,20,null,null,15,7], 来源:力扣 ...
- C#深拷贝方法
概述 为什么要用到深拷贝呢?比如我们建了某个类Person,并且实例化出一个对象,然后,突然需要把这个对象复制一遍,并且复制出来的对象要跟之前的一模一样,来看下我们一般会怎么做. 方法一(利用反射实现 ...
- 安装es客户端软件elasticsearch-head
安装ElasticSearch插件 一 Head插件介绍 elasticsearch-head是elasticsearch的一款可视化工具,依赖于node.js ,所以需要先安装node.js 二 安 ...
- 二阶段目标检测网络-Faster RCNN 详解
Faster RCNN 网络概述 Conv layers RPN 网络 Anchors 生成 RPN 网络训练集 positive/negative 二分类 RPN 生成 RoIs(Proposal ...
- Gorm源码学习-创建行记录
1. 前言 Gorm源码学习系列 Gorm源码学习-数据库连接 此文是Gorm源码学习系列的第二篇,主要梳理下通过Gorm创建表的流程. 2. 创建行记录代码示例 gorm提供了以下几个接口来创建行记 ...
- uniapp解析后端返回的html标签
<rich-text :nodes="data.content"></rich-text>
- 靶机练习 - 温故知新 - Toppo(sudo 提权)
重新做了一下以前做过的第一个靶机(https://www.cnblogs.com/sallyzhang/p/12792042.html),这个靶机主要是练习sudo提权,当时不会也没理解. 开启靶机, ...
- Potree 003 基于Potree Desktop创建自定义工程
1.第三方js库 第三方库js库选择dojo,其官网地址为https://dojotoolkit.org/,git地址为https://github.com/dojo/dojo,demo地址为http ...
- 【3.x合批亲测】使用这个优化方案,iPhone6也能飞起来,直接拉满60帧!
大家好,我是晓衡! 上周我花了3天的时间,体验测试了一款 Creator 3.x 性能优化工具:98K动态分层合批. 它能将 DrawCall 超过 1000+ 次的 2D 界面,实现运行时节点分层排 ...
- U3D编辑器开发&粒子特效/动画预览器示例
概述 U3D提供了一套拓展编辑器的接口,可以用于直接在编辑器非播放模式运行程序.常用于运行一些工具程序,例如资源管理.在做技能编辑器等工具程序时,也可以使用运行模式接口会比较简单(这样也方便开放游戏创 ...