【发布时间】:2016-08-07 15:01:16
【问题描述】:
我是编码新手(目前正在学习 c++,我对 C 有点了解)...
正在阅读 math.h 中的函数并阅读 errno...
根据我提到的网站:-
域错误(输入参数超出了数学定义的运算范围,例如 std::sqrt(-1)、std::log(-1) 或 std::acos(2))。如果设置了 MATH_ERRNO 位,则将 EDOM 分配给 errno。如果设置了 MATH_ERREXCEPT 位,则引发 FE_INVALID。
所以我尝试用这些知识编写一个小程序......
#include <iostream>
#include <cerrno>
#include <cmath>
using namespace std;
int main (void)
{
errno = 0;
cout<<"\nWhat I get :-\n";
cout << "log(-3) = " << log(-3) << "\n";
//shouldn't it do (errno = EDOM) in the above step?
cout << "errno = " << errno << "\n";
cout << strerror(errno) << "\n";
errno = EDOM;
cout<<"\nWhat I want :-\n";
cout << "log(-3) = " << log(-3) << "\n";
cout << "errno = " << errno << "\n";
cout << strerror(errno) << "\n\n";
return(0);
}
在输出中,我看到 errno 在我的第一个块中没有更新为 EDOM,即使 -3 不在 log() 的域中...
输出:-
What I get :-
log(-3) = nan
errno = 0
Undefined error: 0
What I want :-
log(-3) = nan
errno = 33
Numerical argument out of domain
我不明白我在这里错过了什么...... 请帮忙....
我正在 Mac 中的 Apple LLVM 版本 7.3.0 (clang-703.0.31) 上编译我的代码。
【问题讨论】:
-
std::ends对普通文本流没有意义。并且不要使用std::endl,除非你需要它做的额外的东西。'\n'结束一行。
标签: c++