【发布时间】:2009-03-13 00:41:52
【问题描述】:
在 c++ 中,
【问题讨论】:
-
所以我看到很多关于数学领域的回应,例如sqrt(-1) 应该抛出一个域错误(当然,除非你实现复数)。这与 range_error 有何不同?在你回答之前,我会认为 sqrt(-1) 是一个 range_error。
-
需要注意的是,没有c++标准库函数会抛出域错误。它适用于最终用户。
在 c++ 中,
【问题讨论】:
很好的解释表cplusplus.com:
通常,数学函数的域是为其定义的值的子集。例如,平方根函数只为非负数定义。因此,此类函数的负数将是域错误。
【讨论】:
嗯,这就是您从 C++ 标准中获得的所有指导:
类 domain_error 定义了 作为异常抛出的对象类型 由执行报告域 错误。
这里的域是指“问题域”,与互联网无关。例如,如果传递负数,平方根函数可能会引发域错误。
【讨论】:
"详细说明 由库或您抛出以报告域错误(数学意义上的域)。 "
发件人:http://www.aoc.nrao.edu/~tjuerges/ALMA/STL/html/classstd_1_1domain__error.html
据此,如果您的输入不符合您在界面上设置的约束,则应该使用它。比如说,一个应该接收正值并被赋予负值的函数。
【讨论】:
在处理数学函数时会使用域和范围误差。
一方面,函数的域是函数可以接受的值的集合。例如,平方根函数的域是一组正实数。因此,当函数的参数不包含在其域中时,将引发domain_error 异常
另一方面,函数的范围是函数可以返回的值的集合。例如,像这样的函数的范围:
f(x) = -x²
是负实数的集合。那么range_error 的意义何在?如果函数的参数在它的域中,那么结果必须在它的范围内,所以我们不应该在范围内有任何错误......但是,有时值可以定义,但不能具有代表性。例如,在 C 中,<math.h> 中的函数如果返回值的大小太大(或太小)而无法表示,则会产生错误
【讨论】:
invalid_argument,所以你应该改用它:)!
域错误是指数学域函数的问题。有时只为某些值定义函数。如果您尝试使用不属于其域的参数调用此类函数,则会出现域错误。
例如,尝试使用负参数调用 sqrt() 是域错误,因为负数不是 sqrt() 域的一部分。
【讨论】:
用于“领域”错误类的逻辑错误。这可能适用于函数的输入超出其操作的允许域的任何情况。这是它在标准中声明的目的。
例如,您有一个只接受正浮点数的函数,因此它会为负数抛出 domain_error。
【讨论】:
它指的是数学领域。
float MySqrRoot(float x)
{
// sqrt is not valid for negative numbers.
if (x < 0) throw new domain_error;
//...
}
【讨论】: