- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
背景:
许多年前,我继承了一个代码库,该代码库使用 Visual Studio (VC++) 标志“/fp:fast”在特定的计算量大的库中生成更快的代码。不幸的是,'/fp:fast' 产生的结果与不同编译器 (Borland C++) 下的同一个库略有不同。因为我们需要产生完全相同的结果,所以我切换到“/fp:precise”,效果很好,从那以后一切都很顺利。但是,现在我在 uBuntu Linux 10.04 上用 g++ 编译同一个库,我看到了类似的行为,我想知道它是否有类似的根本原因。我的 g++ 构建的数值结果与我的 VC++ 构建的数值结果略有不同。这引出了我的问题:
问题:
g++ 是否具有与 VC++ 中的“fp:fast”和“fp:precise”选项等效或相似的参数? (它们是什么?我想激活等效的“fp:precise”。)
更多详细信息:
我使用调用 g++ 的“make”进行编译。据我所知(make 文件有点神秘,不是我写的)添加到 g++ 调用的唯一参数是“正常”参数(包括文件夹和要编译的文件)和 -fPIC (我不确定这个开关的作用,我没有在“手册”页面上看到它)。
“man g++”中唯一相关的参数似乎是用于打开优化选项。 (例如 -funsafe-math-optimizations)。但是,我不认为我正在打开任何东西,我只是想关闭相关的优化。
我试过 Release 和 Debug 版本,VC++ 给出了相同的发布和调试结果,g++ 给出了相同的发布和调试结果,但我无法让 g++ 版本给出与 VC++ 相同的结果版本。
最佳答案
来自GCC manual :
-ffloat-store Do not store floating point variables in registers, and inhibit other options that might change whether a floating point value is taken from a register or memory.
This option prevents undesirable excess precision on machines such as the 68000 where the floating registers (of the 68881) keep more precision than a double is supposed to have. Similarly for the x86 architecture. For most programs, the excess precision does only good, but a few programs rely on the precise definition of IEEE floating point. Use -ffloat-store for such programs, after modifying them to store all pertinent intermediate computations into variables.
扩展一下,这些差异大部分来自使用 x86 80 位浮点寄存器进行计算(相对于用于存储 double
值的 64 位)。如果中间结果保存在寄存器中而不写回内存,您可以有效地在计算中获得 16 位的额外精度,使它们更精确,但可能与将中间值写入/读取内存(或从计算只有 64 位 FP 寄存器的体系结构)。
这些标志(在 GCC 和 MSVC 中)通常强制将每个中间结果截断为 64 位,从而使计算对代码生成和优化的变幻莫测以及平台差异不敏感。除了准确性/精度方面的成本之外,这种一致性通常会带来轻微的运行时间成本。
关于c++ - 是否有一个(Linux)g++相当于/fp :precise and/fp:fast flags used in Visual Studio?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3234042/
我想打印精度为 4 的 float 。我使用 numpy , jupyter notebook我试过: %precision %.4g %precision 2 np.set_printoptions
我不知道如何解决这个问题,我知道浮点数的显式、隐式和 IEEE-754 规范化表示,但如何将其分解为小问题。请帮我想象一下。 最佳答案 让我们假设 IEEE-754 单精度浮点数。在这样一个浮点数中,
我有一个从 Azure Log Analytics 查询返回的值(以字节表示): 我想将其转换为兆字节并使其更易于阅读。在本例中为“4.19 MB”。 当我尝试将字节值转换为兆字节时,我似乎无法让 K
我最近收到的一项家庭作业要求我们采用在计算机中执行时可能会造成精度损失的表达式,并对其进行更改以避免这种损失。 不幸的是,执行此操作的指示尚未非常明确。通过观察各种正在执行的示例,我知道有一些方法可以
这更多的是一个数值分析问题,而不是编程问题,但我想你们中的一些人能够回答它。 在两个 float 相加中,是否有精度损失?为什么? float 和整数相加时,是否有精度损失?为什么? 谢谢。 最佳答案
所以我知道浮点精度(以及 1.1 之类的东西如何不能用二进制精确表示)等等,但我想知道:那么,与数学相关的库如何实现无限精度?换句话说,例如,您将如何以二进制形式准确地表示 1.1?只是一个简短的描述
阅读本文 http://en.wikibooks.org/wiki/Ada_Programming/Types/delta 让我想知道 delta 的极限值是多少是。 例如 delta 127 ran
我有一个文档数据库,我可以在其中执行搜索。对于每一次搜索,都有 n 个肯定。现在,如果我通过 precision@k 和 recall@k 来评估搜索的性能,那么对于后者来说一切都很好: recall
我注意到在 Modelica(使用 Wolfram System Modeler 4.3)中集成延迟固定时间量的脉冲输入的数值问题: model PulseTest "Test FixedDelay
我看过很多关于系统时钟的讨论,据说例如标准 PC 时钟,例如Windows 的精确度仅为+/-10 毫秒,而实时系统时钟的精确度为亚毫秒级。但这些说法意味着什么?这种时序变化的严重程度完全取决于测量时
我一直在阅读一些内容,但我很难理解如何解释“数字 x”。即: type something is digits 6 我知道它的精度是 6 位数字,但我想让我困惑的是这是什么意思。 1) Y.XXXXX
我的 Elasticsearch 映射(我使用的是 ES 2.1)中有一个 date 类型的字段(输入格式 epoch_second)。我知道我可以在该字段上进行排序 { "sort": [
我在 C++ 中使用 CPLEX 来解决集线器位置问题,即 MIP,并且我最近发现了一组非常精确的输入,CPLEX 认为这些输入是不可行的(即 CPXMIP_INFEASIBLE),即使该问题确实可行
简单地说,魔术函数 %precision 不考虑简单变量输出的浮点精度。 #Configure matplotlib to run on the browser %matplotlib noteboo
我正在尝试使用 sass + compass 来制作流体网格,并且在计算它们时我需要我的 % 至少有 8 位数字,但现在 sass + compass 正在将我的小数四舍五入为 3 位数字。我发现如果
希望如此,我可以第一次发帖,告诉我我想问的问题。 我有cpp代码,可记录从fpga向下到纳秒级的时间戳。它将此值写入CSV。在同一个csv中,我正在计算连续时间戳之间的差异。 当我将其导出到pytho
我用JAVA编写了以下方法: public static float surface(float r) { return(4*Math.PI*Math.pow(r,2));
我试图找出为什么我的 Java 程序中会出现这种精度丢失错误。 这是错误: error: possible loss of precision int digit = num/Mat
关于 java-7 功能“精确重新抛出”和 final Exception ex 有很多问题,我找不到我的问题的明确答案。 “精确重新抛出”和final Exception之间有什么关系? publi
SciPy interpolation有 3 种支持的方法: Supported are “linear” and “nearest”, and “splinef2d”. “splinef2d” is
我是一名优秀的程序员,十分优秀!