왜`abs ()`가 다르게 구현됩니까?
지난 몇 주 동안 내 코드에 매우 실망스러운 버그가있었습니다. 내 코드는 내 컴퓨터에서 예상대로 정확하게 작동하지만 HPC 서버로 내보내 자마자 이상한 결과가 나올 것입니다.
내 컴퓨터 (iMac)에서는 함수 abs()
가 부동 소수점 숫자로 작동하지만 서버 abs()
에서는 정수로 자릅니다.
예:
섬기는 사람
abs(-1.1341234) = 1
내 Mac
abs(-1.1341234) = 1.1341234
이제를 사용하여이 문제를 해결할 수 있다는 것을 알고 있습니다. 그게 문제 fabs()
가 아닙니다. gcc
두 컴퓨터 에서의 버전을 살펴본 결과 다음과 같습니다.
섬기는 사람
g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/apps/software/GCCcore/5.4.0/libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --enable-languages=c,c++,fortran --enable-lto --enable-checking=release --disable-multilib --enable-shared=yes --enable-static=yes --enable-threads=posix --enable-gold=default --enable-plugins --enable-ld --with-plugin-ld=ld.gold --prefix=/apps/software/GCCcore/5.4.0 --with-local-prefix=/apps/software/GCCcore/5.4.0 --enable-bootstrap --with-isl=/dev/shm/GCCcore/5.4.0/dummy-/gcc-5.4.0/stage2_stuff
Thread model: posix
gcc version 5.4.0 (GCC)
내 Mac
g++ -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.1 (clang-1001.0.46.3)
Target: x86_64-apple-darwin18.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
그래서 내 질문은 왜 abs()
gcc와 clang 사이에 다른 결과를 생성합니까? 이 문제는 말 그대로 3 주 정도의 진행 시간이 소요 되었기 때문에 지금은 제가 조금 짜릿하다고 상상하실 수 있습니다.
당신은 해야한다 사용 std::abs
원시 유형의 과부하를 가지고있는.
한 경우에는 C ++ 버전으로 넘어 가고 다른 경우에는 이전 C 버전 (매개 변수를 정수 유형으로 변환)으로 넘어갑니다.
피해야 할 사항 : (1) using namespace std;
( 이유는 여기에 있습니다 ) 및 (2) #include
필요한 기능을 가져 오는 데 적절한 s가 없습니다. 암시 적으로 파일을 포함하기 위해 C ++ 표준 라이브러리 구현에 의존 하지 마십시오 .
일부 컴파일러는 경고 수준을 적절하게 설정하면 "손실"변환에 대해 경고합니다.
참고 URL : https://stackoverflow.com/questions/55916514/why-is-abs-implemented-differently
'IT박스' 카테고리의 다른 글
소나 위반 : 보안-어레이가 직접 저장 됨 (0) | 2020.12.05 |
---|---|
MAVEN_HOME, MVN_HOME 또는 M2_HOME (0) | 2020.12.05 |
파일에서 탐색기 열기 (0) | 2020.12.05 |
Rails : HTML을 PDF로 변환 하시겠습니까? (0) | 2020.12.05 |
GCC를 파이프에서 읽을 수 있습니까? (0) | 2020.12.05 |