小编Ste*_*ini的帖子

由于在C++ std :: vector中使用内联函数而使用g ++ 4.4.7 20120313(32位)导致精度变化

我正在编译centos5.9 32位(在64位机器上运行),目标是32位.g ++版本是4.4.7,它不是默认情况下在centos5.9上提供的版本,但它可以与yum一起下载并作为发行版的一部分提供.

我有一个非常简单的循环如下

std::vector<double> result(n);
std::vector<double> values(n);
// here I compute values(). They are correct and I extensively noted 
// that there's nothing wrong there. The problem is here
result[0] = 0.0;
for ( int i = 0 ; i < n-1 ; ++i ) {
    result[i+1] = result[i]+values[i];
    // printf("x");
}
Run Code Online (Sandbox Code Playgroud)

在这个代码的一个更复杂的版本(显示完全相同的问题)中,我使用以下运算符为类的RealVector封装std :: vector作为passthrough

inline double & operator[] (int index) { return data_[index]; }
Run Code Online (Sandbox Code Playgroud)

问题是我在结果中发现了一个微小但相关的数值差异,这取决于运算符[]是否内联.同样,如果我取消注释上面给出的printf()行,我也会更改结果.请注意,在具有相同配置的centos59 64位中不会出现此问题,或者如果它出现,则低于可检测性.

它是一个编译器错误,还是有一些微妙的魔法?我试图检查asm和解析树,但它太复杂了,无法理解.我通常使用C管理,但在C++中,生成的文件中会出现太多黑暗魔法.

c++ gcc g++

4
推荐指数
1
解决办法
996
查看次数

ELF格式的搬迁信息在哪里?

在装载机部分引用"连接器和装载机"

"加载时重定位比链接时重定位要简单得多,因为整个程序作为一个单元重新定位.[...]将程序读入内存后,加载程序查询目标文件中的重定位项并修复项目指向的记忆位置"

也许我误解了这一点,这只是在一些架构中,但我的问题是:在ELF格式中指定哪些项目需要在加载时重定位?我怎么查询这个清单?

linux linker elf

4
推荐指数
1
解决办法
961
查看次数

为什么clang用-O0生成效率低的asm(对于这个简单的浮点和)?

我在llvm clang Apple LLVM 8.0.0版(clang-800.0.42.1)上反汇编代码:

int main() {
    float a=0.151234;
    float b=0.2;
    float c=a+b;
    printf("%f", c);
}
Run Code Online (Sandbox Code Playgroud)

我编译时没有-O规范,但我也试过-O0(给出相同)和-O2(实际上计算值并存储它预先计算)

产生的反汇编如下(我删除了不相关的部分)

->  0x100000f30 <+0>:  pushq  %rbp
    0x100000f31 <+1>:  movq   %rsp, %rbp
    0x100000f34 <+4>:  subq   $0x10, %rsp
    0x100000f38 <+8>:  leaq   0x6d(%rip), %rdi       
    0x100000f3f <+15>: movss  0x5d(%rip), %xmm0           
    0x100000f47 <+23>: movss  0x59(%rip), %xmm1        
    0x100000f4f <+31>: movss  %xmm1, -0x4(%rbp)  
    0x100000f54 <+36>: movss  %xmm0, -0x8(%rbp)
    0x100000f59 <+41>: movss  -0x4(%rbp), %xmm0         
    0x100000f5e <+46>: addss  -0x8(%rbp), %xmm0
    0x100000f63 <+51>: movss  %xmm0, -0xc(%rbp)
    ...
Run Code Online (Sandbox Code Playgroud)

显然它正在做以下事情:

  1. 将两个浮点数加载到寄存器xmm0和xmm1上
  2. 把它们放在堆栈中
  3. 从堆栈加载一个值(不是之前的xmm0)到xmm0
  4. 执行添加. …

c assembly x86-64 compiler-optimization llvm-codegen

4
推荐指数
1
解决办法
333
查看次数

无法从 powershell 中删除文件,但可以从 GUI 中删除

我正在尝试删除使用 powershell 和 del 生成的文件,但收到此消息

del : Cannot remove item C:\Users\stefano.borini\<redacted>\.tox\py36\Include\fakepq.h: You do not have sufficient access rights to perform this operation.
At line:1 char:1
+ del .\.tox\

+ ~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (fakepq.h:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
del : Cannot remove item C:\Users\stefano.borini\<redacted>\.tox\py36\Include\fakesql.h: You do not have sufficient access rights to perform this operation.
Run Code Online (Sandbox Code Playgroud)

但是,我可以右键单击这些项目并从 Windows 资源管理器中删除它们,没有任何问题。为什么?

windows powershell

4
推荐指数
1
解决办法
2786
查看次数

如何确保仅在 pytest 中明确询问时才运行带有标记的测试?

我有一些测试我用适当的标记标记。如果我运行 pytest,默认情况下它们会运行,但我想默认跳过它们。我知道的唯一选择是在 pytest 调用时明确说“不标记”,但我不希望它们默认运行,除非在命令行明确询问标记。

python pytest

4
推荐指数
2
解决办法
970
查看次数

如何在R中查找列表是否包含空值?

%in% 不按逻辑预期工作:

> 1 %in% list(1,NULL,3)
[1] TRUE
> NULL %in% list(1,NULL,3)
logical(0)
Run Code Online (Sandbox Code Playgroud)

如果列表包含 NULL 元素,如何获得 TRUE 响应?

r

4
推荐指数
1
解决办法
2953
查看次数

是基于xml字符串或URI的命名空间检查?

我总是想知道XML解析器如何处理URI命名空间的检查.是基于字符串还是基于URI?换句话说,这是SVG的标准URI

xmlns="http://www.w3.org/2000/svg"
Run Code Online (Sandbox Code Playgroud)

假设我写了

xmlns="http://www.w3.org/2000/../2000/svg"
Run Code Online (Sandbox Code Playgroud)

要么

xmlns="http://www.w3.org/2000/svg/"
Run Code Online (Sandbox Code Playgroud)

甚至

xmlns="http://www.w3.org:8000/2000/svg"
Run Code Online (Sandbox Code Playgroud)

这些情况是否会被识别为svg名称空间(基于URI)或不基于字符串(基于字符串)?

谢谢

编辑:您可以使用URN(如uuid)这一事实让我觉得它是基于字符串的,因为您无法将正确的URL/URI注意事项应用于非类似URL的URI.但也许在这种情况下,它只是作为一个字符串工作?

编辑:正如Tormod指出的那样,它是用字符串比较的.这提示我想知道是否存在定义URI的建议(例如:最后没有斜杠,全部小写等等).或者它只是一个免费的?

xml namespaces

3
推荐指数
1
解决办法
152
查看次数

为唯一性和URL引用创建ID

我需要创建对象并在Web上提供它们.与stackoverflow类似,我有类似的东西.

http://stackoverflow.com/users/78374
Run Code Online (Sandbox Code Playgroud)

但是,在我的情况下,我创建的对象的ID必须是唯一的,所以我在想一个UUID,导致像这样的URL

http://example.com/users/{8e931066-7d87-4f2b-a3b5-608c4c9a9083}
Run Code Online (Sandbox Code Playgroud)

因为稍后我将不得不将不同的数据库合并在一起,我不希望合并问题.

这是一种公认​​的做法吗?有哪些替代方案?

url uuid

3
推荐指数
1
解决办法
232
查看次数

关于继承和原型的javascript问题

在jQuery库中,我发现了这一行

jQuery.extend = jQuery.fn.extend = function() {
Run Code Online (Sandbox Code Playgroud)

这种困惑让我感到困惑.我认为一个给定的对象自动提供对其原型方法的访问(换句话说,如果一个方法或var没有在对象本身上解析,则在其原型上尝试,然后在原型的原型上等等).

那么,将功能与对象和原型相关联的原因是什么?(在jQuery fn中是原型的别名).

javascript

3
推荐指数
1
解决办法
221
查看次数

伪装一个类的真实模块

假设你有一个python包的以下布局

./a
./a/__init__.py
./a/_b.py
Run Code Online (Sandbox Code Playgroud)

__init__.py你的内心

from _b import *
Run Code Online (Sandbox Code Playgroud)

你在_b.py里面

class B(object): pass
Run Code Online (Sandbox Code Playgroud)

如果从交互式提示导入

>>> import a
>>> a.B
<class 'a._b.B'>
>>> 
Run Code Online (Sandbox Code Playgroud)

我怎样才能完全隐藏_b的存在?

我试图解决的问题如下:我想要一个导入"隐藏"模块和类的Facade包.从外观(在我的情况下a)可用的类保持稳定并保证将来.但是,我希望自由地在"引擎盖下"重新定位类,因此隐藏模块.这一切都很好,但是如果一些客户端代码挑选了一个由Facade提供的对象,那么这个pickle数据将引用隐藏模块嵌套,而不是外观嵌套.换句话说,如果我B在模块中重新定位类_c.py,客户端代码将无法解开,因为pickled类指的是a._b.B已移动的.如果他们提到a.B,我可以在引擎盖下尽可能多地重新安置B级,而不会破坏腌制数据.

python

3
推荐指数
1
解决办法
167
查看次数