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 ...