认识 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的更多相关文章

  1. Infinity、-Infinity和NaN

    首先看看这三个代表什么: Infinity:正无穷大 -Infinity:负无穷大 NaN:Not a Number 当float或double类型的数除零时, 当被除数为非零值时,结果为无穷大 当被 ...

  2. java中比较特殊的三个浮点数Infinity、-Infinity、NaN

    学过javaScript的应该都知道,在js中的数值型number类型中有几个特殊的数,一个正无穷大.一个负无穷大.一个不是一个数NaN. 后来无意中发现java中也有这三个数,不过这三个数是浮点数, ...

  3. C#中的Infinity有个小坑

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...

  4. NaN 和 Infinity

    using Fasterflect; using System; using System.Collections.Generic; using System.Linq; using System.R ...

  5. js cookie设置最大过期时间 Infinity

    Note: 对于永久cookie我们用了Fri, 31 Dec 9999 23:59:59 GMT作为过期日.如果你不想使用这个日期,可使用世界末日Tue, 19 Jan 2038 03:14:07 ...

  6. C#中的Infinity和NaN

    C#中double和float类型有两个特殊值: Infinity(无穷大):5.0 / 0.0 = Infinity NaN(not a number):0.0 / 0.0 = NaN 计算表达式 ...

  7. js Infinity 属性

    Infinity 属性用于存放表示正无穷大的数值. 说明 无法使用 for/in 循环来枚举 Infinity 属性,也不能用 delete 运算符来删除它. Infinity 不是常量,可以把它设置 ...

  8. Codeforces Round #485 (Div. 2) A. Infinity Gauntlet

    Codeforces Round #485 (Div. 2) A. Infinity Gauntlet 题目连接: http://codeforces.com/contest/987/problem/ ...

  9. depth: working copy\infinity\immediates\files\empty

    depth: working copy\infinity\immediates\files\empty 有时间,需要整理下,svn 合并深度这四项:具体的意思.

  10. Dividing Infinity - Distributed Partitioning Schemes

    This is the second post in a series discussing the architecture and implementation of massively para ...

随机推荐

  1. 【Java框架】SSM-Spring总结:IOC、DI、AOP、JDBC、事务管理、实际案例

    〇.概述 1.常用资料 2.组成 一.控制反转与依赖注入 (一)Spring概述 1.介绍 以IOC和AOP为内核的框架 通过IOC实现控制,使用spring创建对象,与DI描述同一个概念 DI是对象 ...

  2. 【每日一题】【DFS&每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...

  3. [数据结构]哈希拉链法化解冲突+ASL计算

    看这篇就好(自用,别骂我) 摘自博客园 存疑:学校考试空节点算不算查找次数???

  4. Win10系统安装U盘,安装纯净版Win10的通用教程

    安装前准备:1.准备8G或8G以上U盘(32G以内).2.制作U盘会格式化U盘,U盘内的重要文件也要事先备份好.操作步骤:1.打开微软下载WIN10网址:(如果网址无法打开,可以下载解压运行附件内的工 ...

  5. 【机器学习】李宏毅——生成式对抗网络GAN

    1.基本概念介绍 1.1.What is Generator 在之前我们的网络架构中,都是对于输入x得到输出y,只要输入x是一样的,那么得到的输出y就是一样的. 但是Generator不一样,它最大的 ...

  6. 使用python批量更改文件

    最近整理之前学爬虫存储的文件,发现有很多文件名有重复,而我有一点点强迫症,不想文件名重复,就写了一个Python代码来解决文件名重复问题 import os import random import ...

  7. python实验报告(第11章)

    实验11:使用Python操作数据库 一.实验目的和要求 1.学会数据库编程接口: 2.学会使用SQLite: 3.学会使用MySQL. 二.实验环境 软件版本:Python 3.10 64_bit ...

  8. [论文总结] kmeans聚类和WGCNA

    kmeans聚类和WGCNA 文章目录 kmeans聚类和WGCNA 论文1 论文2 论文3 总结 总结了3篇论文中kmeans聚类和WGCNA的运用. 论文1 Comprehensive disse ...

  9. ArcGIS工具 - 按字段分割图层

    天下大势,合久必分,分久必合.合并.分割在GIS数据处理和管理中也十分常见,例如按行政区划名称导出多个区县行政图层.按地类名称导出多个地类图层. 功能说明 其实,在ArcGIS中除了按属性导出外,最接 ...

  10. P8701 [蓝桥杯 2019 国 B] 第八大奇迹

    简要题意 你需要维护一个长度为 \(L\) 的序列 \(a\),初始时全部都是 \(0\),有 \(N\) 个操作,支持: C p x,将 \(a_p\) 修改为 \(x\). Q a b,输出 \( ...