Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

112
Vistas
Detectar si una expresión podría tener un resultado indefinido

Me gustaría determinar si una expresión dada puede tener un resultado indefinido.

Por ejemplo, tome el siguiente cálculo:

 a = rand() * 1000 // a real number >=0 and <1000 b = trunc( a )*2 // an even number between 0 and 1998 c = sin( a ) // a real number >=-1 and <=1 d = pow( c, b ) // a positive real number >=0 and <=1 e = log( a ) // either undefined (-Infinity), or a real number <6.907… f = sqrt( e ) // either undefined, or a real number >=0 and <2.628…

¿Cómo puedo escribir un programa que me diga que e y f pueden no estar definidos, mientras que los demás siempre están definidos?

¿Hay alguna biblioteca que pueda verificar esto por mí?

Actualmente estoy escribiendo en JavaScript, pero estoy dispuesto a cambiar el idioma si no existe tal biblioteca para JS, pero existe para otros idiomas.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Usando python y su biblioteca sympy, hay sympy.calculus.util.continuous_domain .

 from sympy import Symbol from sympy import sin, log, sqrt from sympy.sets import Interval from sympy.calculus.util import continuous_domain, function_range a = Symbol('a') b = 3 c = sin(a) d = c ** b e = log(a) f = sqrt(e) for y in (c,d,e,f): print(y) print('domain: ', continuous_domain(y, a, Interval(0,1000))) print('range: ', function_range(y, a, Interval(0,1000))) print()

Producción:

 sin(a) domain: Interval(0, 1000) range: Interval(-1, 1) sin(a)**3 domain: Interval(0, 1000) range: Interval(-1, 1) log(a) domain: Interval.Lopen(0, 1000) range: Interval(-oo, log(1000)) sqrt(log(a)) domain: Interval(1, 1000) range: Interval(0, sqrt(log(1000)))

Desafortunadamente, reemplazar b = 3 con b = Symbol('b', integer = True) o b = floor(a) resulta en un bloqueo espectacular de function_range(d, a, Interval(0,1000)) . Todavía puede obtener el continuous_domain , pero no el function_range .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda