为什么`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)没有适当的#includes来引入所需的功能。不要依赖C ++标准库实现来隐式包含文件。

如果适当地设置警告级别,某些编译器会警告您“有损”转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么通用列表的声明有所不同?

为什么当类型实现接口时,行为会有所不同?

为什么中断和isInterrupted的行为方式有所不同?

为什么numpy索引在更高维度上的工作方式有所不同?

为什么GCC对这些摘要的处理方式有所不同?

为什么当溢出:应用了隐藏时,内联块的工作方式有所不同?

为什么与其他结构相比,DateTime的GetHashCode()方法的编译方式有所不同?

为什么在使用ansible时Python脚本的工作方式有所不同?

为什么编译器优化这些情况的方式有所不同?

为什么注释符号在JavaScript中的计算方式有所不同?

为什么<p>元素在Rackspace电子邮件中的显示方式有所不同?

当File对象是新对象时,为什么flock()的工作方式有所不同?

Java到Kotlin Array的转换,为什么在不同的情况下有所不同?

当以编程方式单击按钮与单击DOM时,为什么任务/微任务执行顺序有所不同?

为什么枕头和scikit图像打开8位RGB图像的方式有所不同?

我正在使用Jquery添加src属性,但其工作方式有所不同。为什么?

为什么DNS响应有所不同?

为什么numpy导入的行为有所不同?

为什么Ejabberd处理PUT和POST请求的方式有所不同?

为什么groupby操作的行为有所不同

如果实现了数据集,为什么查询结果会有所不同?

为什么在irb中对顶级方法的处理方式有所不同?

为什么输出会有所不同?为什么数据可以自行更改?

从管道读取时,为什么“ sed q”的工作方式有所不同?

为什么在Firefox,Chrome和IE中,这种方法的工作方式有所不同?

在Mac和Windows上,Python读取tif图像的方式有所不同。为什么?如何?哪个是对的?怎么修?

为什么hide()的行为有所不同?

为什么scala.beans.beanproperty在Spark中的工作方式有所不同

为什么to_sym的行为有所不同?