en C++, <stdexcept> tiene una clase base para 'errores de dominio', std :: domain_error. No entiendo en qué circunstancias debería arrojar un error de dominio en mi código. todas las otras clases base de excepciones son bastante auto explicativas. Estoy bastante seguro de que std :: domain_error no tiene nada que ver con los nombres de dominio de Internet, per se, así que explique qué clase de error es un error de dominio y proporcione algunos ejemplos.¿Qué es un error de dominio
Respuesta
Los errores de dominio y de rango se usan cuando se trata de funciones matemáticas.
Por un lado, el dominio de una función es el conjunto de valores que puede aceptar la función.Por ejemplo, el dominio de la función de raíz cuadrada es el conjunto de números reales positivos. Por lo tanto, se lanzará una excepción domain_error
cuando los argumentos de una función no están contenidos en su dominio
Por otro lado, el rango de una función es el conjunto de valores que la función puede devolver. Por ejemplo, el rango de una función como esta:
f(x) = -x²
es el conjunto de números reales negativos. Entonces, ¿qué sentido tiene el range_error
? Si los argumentos de la función están en su dominio, entonces el resultado debe estar en su rango, por lo que no debería haber ningún error en el rango ... Sin embargo, a veces el valor puede ser definido, pero sin ser representable. Por ejemplo, en C, las funciones en <math.h>
generan errores si el valor de retorno es demasiado grande (o demasiado pequeño) para representar
Me pregunto si es estándar o reprensible arrojar domain_error y range_error en funciones no matemáticas, para representar las mismas condiciones de error (argument_error rather than domain_error quizás?) – fuzzyTew
@fuzzyTew: De hecho, la biblioteca estándar contiene una clase ['invalid_argument'] (http://msdn.microsoft.com/en-us/library/xcs4t8fy%28v=vs.80%29.aspx), por lo que probablemente debería usar eso en su lugar :)! –
Gracias por una buena explicación de cuándo usar la excepción. Tu opinión sobre range_error también es interesante. Como [cpplus.com] (http://www.cplusplus.com/reference/stdexcept/range_error/) indica que es para "errores de rango en los cálculos internos". Incluso se coloca en el grupo de errores de tiempo de ejecución ... – Arks
A error de dominio se refiere a problemas con dominios matemáticos de funciones. Las funciones a veces se definen solo para ciertos valores. Si intenta invocar dicha función con un argumento que no forma parte de su dominio, se trata de un error de dominio.
Por ejemplo, intentar invocar sqrt()
con un argumento negativo es un error de dominio, ya que los números negativos no son parte del dominio de sqrt()
.
Pero cuando hago sqrt (-1) devuelve nan y no lanza una excepción. – rmp251
Se refiere a los dominios matemáticos.
float MySqrRoot(float x)
{
// sqrt is not valid for negative numbers.
if (x < 0) throw new domain_error;
//...
}
Es por errores lógicos de la clase de errores de "dominio". Esto podría aplicarse a cualquier situación donde la entrada a una función exceda el dominio permitido para que funcione. Ese es su propósito declarado en el estándar.
Por ejemplo, tiene una función que solo toma flotantes positivos, por lo que arroja un domain_error para números negativos.
¿cómo es eso diferente de range_error? – rev
bastante buena forma explicación cplusplus.com:
Generalmente, el dominio de una función matemática es el subconjunto de valores que se define para. Por ejemplo, la función raíz cuadrada solo está definida para números no negativos. Por lo tanto, un número negativo para dicha función sería un error de dominio.
"Descripción detallada lanzada por la biblioteca, o por usted, para informar de errores de dominio (dominio en el sentido mathmatical)."
Desde: http://www.aoc.nrao.edu/~tjuerges/ALMA/STL/html/classstd_1_1domain__error.html
acuerdo con esto, debería ser utilizado si recibe una entrada que no cumple con las restricciones que pone en su interfaz. Como decir, una función que se supone que recibe un valor positivo y recibe una negativa.
Bueno, esta es toda la orientación que recibe de la norma C++:
El domain_error clase define el tipo de objetos lanzados como excepciones por la aplicación reportar el dominio errores .
El dominio aquí significa "dominio del problema", no tiene nada que ver con Internet. Por ejemplo, una función de raíz cuadrada podría arrojar un error de dominio si se pasa un número negativo.
- 1. ¿Qué es un dominio de aplicación .NET?
- 2. ¿Qué es un dominio de aplicación .NET?
- 3. Qué es un modelo de dominio
- 4. ¿Qué es la lógica de dominio?
- 5. ¿Por qué `to` es un nombre de dominio válido?
- 6. ¿Qué es el diseño impulsado por dominio?
- 7. ¿Qué es un "error de doble pila"?
- 8. ¿Qué es un error de autobús?
- 9. ¿Qué es el diseño impulsado por dominio?
- 10. ¿Qué es un freezable para padres? ¿Qué significa este error?
- 11. ¿Qué es exactamente este error?
- 12. ¿Por qué obtengo un objeto no es un error iterable?
- 13. ¿Es posible que un dominio de Grails no tenga 'id'?
- 14. ¿Qué es un Rack - error de "no aceptador"?
- 15. ¿Por qué no es un error de sintaxis?
- 16. ¿Qué es un error de expansión implícita divergente?
- 17. ¿Es posible tener un dominio HTTPS diferente en un iFrame, en otro dominio HTTPS?
- 18. modelo de dominio anémico frente a modelo de dominio en un diseño de dominio simple
- 19. ¿Qué significa "dominio" y "persistencia"?
- 20. ¿Por qué Ruby on Rails es un lenguaje específico de dominio?
- 21. Agradable degradación fuera del dominio de las aplicaciones web: ¿qué tan significativo es un problema?
- 22. VB.Net ¿por qué no es esto un error?
- 23. ¿Es "ANR" una excepción o un error o qué?
- 24. Dominio privado de Nhibernate y Sql Servidor error
- 25. ¿Por qué algunas cookies tienen un '.' antes del dominio?
- 26. Restringir ActionMailer a un dominio
- 27. ¿Por qué a nadie le importa este error de MySQLdb? ¿Es un error?
- 28. ¿Por qué Array.Length es un int, y no es un error
- 29. ¿Por qué Grails no me notifica el error al guardar el objeto de dominio?
- 30. ¿Qué es un mejor diseño?
, por lo que veo muchas respuestas sobre los dominios matemáticos, p. sqrt (-1) debería lanzar un domain_error (a menos que, por supuesto, implemente números complejos). ¿Cómo es esto diferente de range_error? antes de sus respuestas, habría considerado que sqrt (-1) es un range_error. – rev
Debe tenerse en cuenta que ninguna función de biblioteca estándar de C++ arroja un error de dominio. Está destinado para el usuario final. – Dan