tutorial traduccion meaning fabs ejemplo compiler comando clase biblioteca abs c++ gcc compilation clang

traduccion - math c++ reference



¿Por qué `abs()` se implementa de manera diferente? (1)

Debe usar std::abs , que tiene sobrecargas para los tipos primitivos.

Está cayendo a la versión C ++ en un caso, y la versión antigua C (que convierte sus parámetros en tipos integrales) en el otro.

Cosas a evitar: (1) using namespace std; ( aquí es por qué ) y (2) no tener el #include s apropiado para traer la funcionalidad que necesita. No confíe en las implementaciones de la biblioteca estándar de C ++ para incluir archivos para usted implícitamente.

Algunos compiladores le avisarán de una conversión "con pérdida" si configura el nivel de advertencia adecuadamente.

He tenido un error muy frustrante en mi código durante las últimas semanas. Mi código funcionaría exactamente como se esperaba en mi computadora, pero tan pronto como lo envié al servidor HPC, produciría resultados extraños.

Lo he resumido en esto: en mi computadora (iMac) la función abs() funciona con números de punto flotante, pero en el servidor abs() trunca a un entero.

Ejemplo:

Servidor

abs(-1.1341234) = 1

Mi mac

abs(-1.1341234) = 1.1341234

Ahora sé que puedo arreglar esto usando fabs() , esa no es la pregunta. Miré las versiones de gcc en cualquiera de las máquinas y esta es la salida:

Servidor

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)

Mi 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

Entonces, mi pregunta, ¿por qué abs() produce resultados diferentes entre gcc y clang? Este problema me costó literalmente 3 semanas de progreso, por lo que puedes imaginarte que estoy un poco salada en este momento ...