Saltar al contenido

¿Por qué Math.min() > Math.max()?

Ya no necesitas buscar más en otras webs porque llegaste al lugar correcto, poseemos la respuesta que buscas y sin complicarte.

Solución:

Por supuesto que sí, porque el número de salida debería ser Infinity por Math.min. Todos los números que son menores que infinito positivo deben ser los más pequeños de una lista, si no hay más pequeños.

Y para Math.max es lo mismo; todos los números que son más grandes que el infinito negativo deberían ser los más grandes si no hay más grandes.

Así que para tu primer ejemplo:

Math.min(5) donde 5 es menor que infinito positivo (Infinity) volverá 5.

Actualizar

Vocación Math.min() y Math.max con un array Es posible que el parámetro no funcione en todas las plataformas. Deberías hacer lo siguiente en su lugar:

Math.min.apply(null, [ 1, 2, 3, 4 , 5 ]);

Donde el primer parámetro es el argumento de alcance. Porque Math.min() y Math.max() son “static” funciones, debemos establecer el argumento de alcance en null.

Es complicado, pero importante, decidir correctamente qué Funciones agregadas debe hacer cuando pasa el conjunto vacío.

A veces es ‘intuitivamente obvio’: ¿Cuál es la SUMA de ningún elemento? Cero, estoy seguro de que todos dirían fácilmente.

A veces lo es menos: ¿Cuál es el PRODUCTO de ningún elemento? Los que tienen algo de formación matemática dirán rápidamente “uno”, pero esto no es del todo obvio.

Luego llegas a MIN y MAX y ¡guau! ¿Cómo conseguimos esos infinitos?


Una forma de decidir qué debe hacer una función agregada aquí es considerar qué comportamientos queremos que permanezcan consistentes, incluso con conjuntos vacíos. Por ejemplo, supongamos que tenemos estos conjuntos no vacíos:

A =  1, 2, 3  
B =  4, 5 

Ahora es true aquí, y de hecho para cualquier conjunto no vacío, que

SUM(A ∪ B) = SUM(SUM(A), SUM(B))
15 = 6 + 9

PRODUCT(A ∪ B) = PRODUCT( PRODUCT(A), PRODUCT(B) )
120 = 6 * 20

MIN(A ∪ B) = MIN( MIN(A), MIN(B) )
1 = MIN(1, 4)

¿No sería bueno, dicen los matemáticos, si estas propiedades se mantuvieran true incluso cuando uno o ambos conjuntos están vacíos? Seguramente lo haría.

y se mantiene este comportamiento que decide qué valor le asignamos SOME_AGGREGATE_FUNCTION(∅) :

Para poder

SUM(A ∪ B) = SUM( SUM(A), SUM(B) )

permanecer true cuando A está vacío y B no es, debemos tener SUM(∅) = 0

Para poder

PRODUCT(A ∪ B) = PRODUCT( PRODUCT(A), PRODUCT(B) )

permanecer true cuando A está vacío y B no es, debemos tener PRODUCT(∅) = 1

Y finalmente:

Para poder

MIN(A ∪ B) = MIN( MIN(A), MIN(B) )

permanecer true cuando A está vacío y B no lo es, necesitamos MIN(∅) ser un valor que se garantiza que es mayor que cualquier valor posible en B, de modo que no ‘interfiere con’ el resultado de MIN(B). Y obtenemos nuestra respuesta: MIN(∅) = +∞

¿Por qué hace esto?

Porque eso es lo que el estándar dice que debería suceder;

15.8.2.11 máx. ( [ value1 [ , value2 [ , … ] ]])

Dados cero o más argumentos, llama a ToNumber en cada uno de los argumentos y devuelve el mayor de los valores resultantes.

  • Si no se dan argumentos, el resultado es -Infinito
  • Si algún valor es NaN, el resultado es NaN.
  • La comparación de valores para determinar el valor más grande se realiza como en 11.8.5 excepto que +0 se considera mayor que 0.

15.8.2.12 minutos ( [ value1 [ , value2 [ , … ] ]])

Dados cero o más argumentos, llama a ToNumber en cada uno de los argumentos y devuelve el menor de los valores resultantes.

  • Si no se dan argumentos, el resultado es Infinito.
  • Si algún valor es NaN, el resultado es NaN.
  • La comparación de valores para determinar el valor más pequeño se realiza como en 11.8.5 excepto que +0 se considera mayor que 0

PD; No es estándar que Math.max() o Math.min() acepta un array. Usar Math.max(a,b,c,d,e,...) etc. en su lugar.

En Chrome al menos;

Math.max([1,2,3,4]); // NaN

Puntuaciones y reseñas

Recuerda algo, que tienes concesión de valorar este tutorial si diste con el resultado.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 1)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *