다소 기본적인 질문이지만 여기서는 약간 분실되어 있습니다. 나는 복소수로 작동하는 도서관에서 일하고 있습니다. 지금까지 Mac OS 10.8 및 Ubuntu 10.04에서 구현을 사용했습니다 (llvm-gcc를 Man 및 gcc를 사용하여 Ubuntu에서 사용). 어제 icpc (icc/2013.3)를 사용하는 다른 컴퓨터에서 시도했는데 복소수 크런치 부분이 실패했습니다.복소수의 제곱근 - g ++ 대 icpc
#include <iostream>
#include <complex>
using namespace std;
int main(int argc, char* argv[])
{
std::complex<double> tmpcmplxnumber(26.0,0.0);
cout << "Number: " << tmpcmplxnumber << endl;
std::complex<double> newcmplxnumber = 1.0 - tmpcmplxnumber;
cout << "New Number: " << newcmplxnumber << endl;
cout << "Sqrt of New Number: " << sqrt(newcmplxnumber) << endl;
return 0;
}
GCC 출력 (두 시스템) :
Number: (26,0)
New Number: (-25,-0)
Sqrt of New Number: (0,-5)
이
ICPC 출력 :
Number: (26,0)
New Number: (-25,0)
Sqrt of New Number: (0,5)
내가 연락하고 경우
나는이 간단한 예제를 사용하여 문제를 못을 박았다 정확하게 gcc는 ISO 표준을 구현하므로 결과는 정확해야합니다 (서명 된 0의 모든 항목 ... 등). 따라서 i는 CPC 구현이 '잘못되었습니다'또는 특정 문제에 대한 플래그가 있습니까?
업데이트 두 결과가 모두 수학적 관점에서 유효하다는 것을 알고 있지만, icpc를 사용할 때도 gcc 결과가 필요합니다.
둘 다 정확합니다. 임의의 숫자의 제곱근에는 양수와 음수의 두 가지 솔루션이 있습니다. –
나는 "어느 쪽"이 다른 쪽보다 필연적으로 더 낫다고 확신하지 않지만, 'abs'를 사용하여 서명을 수정하는 방법은 무엇입니까? –