Может ли число в JavaScript достичь Infinity во время выполнения? - PullRequest
1 голос
/ 02 мая 2019

Мне было просто любопытно, может ли число в JavaScript когда-либо достигать Infinity.

Диапазон чисел JavaScript достаточно хорош - 2 до степени 64 различных чисел, что составляет примерно 18 квинтильян (18 с 18 нулями после него) .Это много.

Теперь у меня есть несколько вопросов:

  1. Что бы на самом деле произошло, если число вырастет за пределы этого диапазона?Будет ли JavaScript ссылаться на него как на новое Infinity число?
  2. Каковы все сценарии в JavaScript, где значение Infinity может быть присвоено переменной во время выполнения?

Давайте рассмотрим пример кода,

Попытка написать метод incrementNumToInfinity() для увеличения значения определенного числа раз, чтобы a === b можно было оценить как true (также, чтобырассмотрим другие возможные сценарии, в которых движок JavaScript может присвоить значение Infinity переменной во время выполнения).

var a = 1000; // a positive number
var b = Infinity;
console.log(a === b); // It returns false, that's expected

function incrementNumToInfinity(num) {
    // Logic to convert our variable num into Infinity
    return num;
};

a = incrementNumToInfinity(a); // Input: 1000, Expected output: Infinity
console.log(a === b); // Should return true

Ответы [ 4 ]

2 голосов
/ 12 мая 2019

Может ли число в JavaScript достигать бесконечности во время выполнения?

Возможно во время выполнения получить число, которое является результатом вычисления и имеет значение Infinity.У Нины Шольц есть показанный один такой случай: если вы сделаете x = 1 / 0, x будет иметь значение Infinity.

Что бы на самом деле произошло, если число выходит за пределыэтот диапазон [т.е. вне диапазона, который может обрабатывать JavaScript]?Будет ли JavaScript ссылаться на него как на новое Infinity число?

Мы можем попробовать.Number.MAX_VALUE - максимальное число с плавающей запятой, которое может представлять JavaScript.Если вы запустите это:

Number.MAX_VALUE + 1 

Вы получите большое число, но не Infinity.Что там происходит?Хмм, давай попробуем вот что:

Number.MAX_VALUE + 1 === Number.MAX_VALUE

Результат равен true.Скажи, что?Проблема в том, что числа с плавающей запятой имеют ограниченную точность, когда я добавляю 1 к Number.MAX_VALUE , не хватает точности для регистрации приращения.

Если вы попробуете это:

Number.MAX_VALUE * 2

Тогда вы получите Infinity.

Каковы все сценарии в JavaScript, где значение Infinity может быть присвоено переменной во время выполнения?

"все сценарии" ... хм ... Есть несколько проблем с составлением перечня всех сценариев.С одной стороны, не ясно, по каким критериям следует отличать один сценарий от другого.-Math.log(0) отличается от 1 / 0.Если так, то почему?Кроме того, существует проблема, заключающаяся в том, что движки JavaScript имеют достаточно возможностей для реализации математических функций.Например, Math.tan определяется следующим образом в текущем наброске :

Math.tan(x)

Возвращает зависящее от реализации приближение к тангенсу x.Аргумент выражается в радианах.

Если x равно NaN, результат равен NaN.

Если x равно +0, результат равен +0.

Если x равно -0, результат равен -0.

Если x равен +∞ или -∞, результат равен NaN.

Он не требует значения для Math.tan(Math.PI / 2) Если вы помните свои классы тригонометрии, pi / 2 составляет 90 градусов, а под этим углом касательная бесконечна.Различные версии v8 вернули Infinity или очень большое положительное число.(См. этот вопрос .) Спецификация не обязывает один результат перед другим: реализации свободны в выборе.

Таким образом, практически, если вы начинаете с набора случаев, которые, как вы знаете, математически должныпроизводить Infinity, вы не знаете, будут ли они на самом деле производить это, пока вы не попробуете их.


Часть вашего вопроса с функцией incrementNumToInfinity не полностьюясно для меня.Вы, кажется, спрашиваете, можете ли вы достичь бесконечности, просто увеличив число.Смотря что ты имеешь в виду.Если вы имеете в виду это:

let x = 0;
while (x !== Infinity) {
  x++;
}

Это никогда не закончится .x никогда не выйдет за пределы Number.MAX_SAFE_INTEGER + 1.Так что оно не достигнет Infinity.Попробуйте это:

let x = Number.MAX_SAFE_INTEGER + 1;
x === x + 1;

Вы получите результат true.Это снова сталкивается с проблемами точности. Приращение в 1 недостаточно велико, чтобы изменить разницу в точности, доступной для вас.

Изменение приращения на 2, 5, 10 или 10000000 на самом деле не решает проблему, онопросто меняется, как далеко вы можете пройти, прежде чем ваш прирост больше не будет иметь значения.

1 голос
/ 12 мая 2019

Может ли число в JavaScript когда-либо достигать Infinity во время выполнения?

Предположим, что в вашей программе нет утечки памяти. Я верю, что это может достичь Бесконечности.

console.log(Number.MAX_SAFE_INTEGER)
// 9007199254740991
console.log(Number.MAX_VALUE)
// 1.7976931348623157e+308

var i = Number.MAX_SAFE_INTEGER
while (i != Infinity) {
  i += Math.pow(10, 307)
  console.log(i)
}
// 1.0000000000000005e+307
// 2.000000000000001e+307
// 3.0000000000000013e+307
// 4.000000000000002e+307
// 5.000000000000002e+307
// 6.000000000000003e+307
// 7.000000000000003e+307
// 8.000000000000004e+307
// 9.000000000000004e+307
// 1.0000000000000004e+308
// 1.1000000000000004e+308
// 1.2000000000000003e+308
// 1.3000000000000003e+308
// 1.4000000000000003e+308
// 1.5000000000000002e+308
// 1.6000000000000002e+308
// 1.7000000000000001e+308
// Infinity
0 голосов
/ 20 июля 2019

Соотношение квадратного корня квадрата, умноженного на PI для того же квадрата, вычитающего PI для учета бесконечного затухания по мере приближения к бесконечности, равно бесконечности.Или доказывать, что Архимед неправ и прав одновременно.PI и квадрат эквивалентны, потому что ни один из них никогда не достигнет 0. Это явление также объясняет нулевую границу в теории Пифагора, где квадрат A + квадрат B = квадрат c при приближении к бесконечности.

Math.sqrt (1) / (Math.PI * ((Math.sqrt (1))) - Math.PI)

Это результат загадки Fox и Duck.Когда утка движется на 1r от расстояния до пруда, лиса движется на 180 градусов или представляет собой сумму, эквивалентную квадратам ее противоположных и смежных углов, мы получаем квадрат 2 ^ 2 (расстояние перемещения от центра водоема) Квадратный кореньPI к заданному отношению 1: 4, поэтому гипотонуза треугольника над пи - пи = бесконечность или отношение 1: 1 с противоположными векторами в любой конкретной точке.

0 голосов
/ 02 мая 2019

объявление 2:

Каковы все сценарии в JavaScript, где значение Infinity может быть присвоено переменной во время выполнения?

Вы можете взять дивизию с нуля.

var x = 1 / 0;

console.log(x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...