小编ste*_*fen的帖子

使用math.isclose函数,其值接近0

我们知道,由于数字的二进制表示,此表达式的计算结果为False(至少在Python中):

0.2 + 0.4 == 0.6
Run Code Online (Sandbox Code Playgroud)

为了能够检查数字错误中的相等性,该模块math提供isclose:

import math
math.isclose(0.2 + 0.4 , 0.6)
Run Code Online (Sandbox Code Playgroud)

最后一个表达式True按预期产生.

现在为什么这个表达式False再次出现?

math.isclose(0.2 + 0.4 - 0.6 , 0.0)
Run Code Online (Sandbox Code Playgroud)

看来,一切相比,0.0False

math.isclose(1.0e-100 , 0.0)
Run Code Online (Sandbox Code Playgroud)

python math floating-point precision python-3.x

11
推荐指数
1
解决办法
1万
查看次数

为什么标准库容器没有共同的基础?

只是出于兴趣......

如果我要设计一个容器库,我肯定会从一个公共基类派生它们,它们会有(也许是抽象的)方法声明,如size()insert().

标准库容器是否有充分的理由不能像这样实现?

c++ stl c++-standard-library

8
推荐指数
1
解决办法
905
查看次数

AWK从文件中打印每第n行

我想使用AWK打印文件的每个第N行.我尝试修改一般格式: -

awk '0 == NR % 4' results.txt

至:-

awk '0 == NR % $ct' results.txt
Run Code Online (Sandbox Code Playgroud)

其中'ct'是应跳过的行数.它不起作用.有人可以帮帮我吗?提前致谢.

awk

8
推荐指数
1
解决办法
2万
查看次数

如何展平嵌套容器的迭代器?

这是詹姆斯对这个问题的答案的一个(另一个)跟进:扁平化迭代器

如何更改flattenig_iterator以使其递归工作?假设我有更多级别的嵌套容器,我不希望被限制在给定的嵌套深度.即flattening_iterator应该使用

std::vector< std::vector < std::vector < int > > >
Run Code Online (Sandbox Code Playgroud)

以及

std::vector< std::vector < std::vector < std::vector < int > > > >
Run Code Online (Sandbox Code Playgroud)

在我的实际代码中,我有一个对象数组,它们本身可能包含或不包含这样的数组.

编辑:

在使用不同方式迭代不同类型的嵌套容器后,我学会了一些其他人可能感兴趣的东西:

使用嵌套循环访问容器元素比使用迭代器解决方案快5到6倍.

优点:

  • 元素可以是复杂的对象,例如(在我的例子中)包含容器的类.
  • 更快的执行

缺点:

  • 每个容器结构都需要一个新的循环实现
  • 标准库算法不可用

其他利弊?

c++ iterator

7
推荐指数
2
解决办法
2251
查看次数

运行最小的OpenMP程序时的非法指令

这个最小的OpenMP程序

#include <omp.h>
int main() 
{
  #pragma omp parallel sections
  {
    #pragma omp section
    {
      while(1) {}
    }

    #pragma omp section
    {  
      while(1) {}
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在编译和运行时将产生此错误gcc test.c -fopenmp:

Illegal instruction (core dumped)
Run Code Online (Sandbox Code Playgroud)

当我改变其中一个循环时

  int i=1;
  while(i++) {}
Run Code Online (Sandbox Code Playgroud)

或任何其他条件,它编译和运行没有错误.看起来,1作为不同线程中的循环条件会导致一些奇怪的行为.为什么?

编辑:我正在使用gcc 4.6.3

编辑:这是gcc中的一个错误,并作为Bug 54017提交给gcc开发人员.

c multithreading gcc openmp

7
推荐指数
1
解决办法
1554
查看次数

既然存在智能指针,那么使用C类型指针的方式是否已弃用?

可能重复:
我使用哪种指针?

有许多专业人士赞成C++ 11的智能指针:它们更安全,功能更强,范围更明显等.

"经典"C是否像指针一样

class C{};
C c;
C* c_p = &c;
Run Code Online (Sandbox Code Playgroud)

现在已经过时了?他们甚至被弃用了吗?或者是否存在C指针仍然有意义的用例?

编辑:带有智能指针的代码片段:

class C{};
C c;
std::shared_ptr<C> c_p(new C());
Run Code Online (Sandbox Code Playgroud)

编辑:感谢您指出副本.从Xeo的回答:

使用哑指针(原始指针)或对资源的非拥有引用的引用,当>你知道资源将比引用对象/范围更长时.当您需要可空性或可重置性时,首选引用和>使用原始指针.

如果这就是全部,我接受这个问题已被关闭.

c++ smart-pointers c++11

6
推荐指数
2
解决办法
1273
查看次数

受保护的构造函数,使基类不可实例化

如果我想避免它的实例,那么使基类构造函数受到保护是一种好习惯吗?我知道我也可以使用纯虚拟虚拟方法,但这看起来很奇怪......

请考虑以下代码:

#include <iostream>

using std::cout;
using std::endl;

class A 
{
protected:
    A(){};
public:
    virtual void foo(){cout << "A\n";};
};

class B : public A
{
public:
    void foo(){cout << "B\n";}
};

int main()
{
    B b;
    b.foo();
    A *pa = new B;
    pa->foo();

    // this does (and should) not compile:
    //A a;
    //a.foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有缺点或副作用,我看不到?

c++ inheritance constructor virtual-functions

6
推荐指数
1
解决办法
6730
查看次数

D中的语句宏

我正在将一些用C++编写的代码移植到D.有一次,我介绍了一个包含赋值的便捷宏.喜欢

#define so_convenient(x) value = some_func(x,#x)
Run Code Online (Sandbox Code Playgroud)

所以我正在使用宏

  1. 访问实际的符号及其字符串和

  2. 做作业.

我如何在D中实现这一目标?

c++ macros d c-preprocessor

6
推荐指数
1
解决办法
185
查看次数

类型提示和链接分配以及多个分配

我猜这两个问题是相关的,因此我将它们一起发布:

1.-是否可以在链接的分配中放置类型提示?

这两次尝试均失败:

>>> def foo(a:int):
...     b: int = c:int = a
  File "<stdin>", line 2
    b: int = c:int = a
              ^
SyntaxError: invalid syntax
>>> def foo(a:int):
...     b = c:int = a
  File "<stdin>", line 2
    b = c:int = a
         ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

2.-是否可以在多个分配中放入类型提示?

这些是我的尝试:

>>> from typing import Tuple
>>> def bar(a: Tuple[int]):
...     b: int, c:int = a
  File "<stdin>", line 2
    b: int, c:int = a
          ^
SyntaxError: invalid syntax
>>> …
Run Code Online (Sandbox Code Playgroud)

python type-hinting python-3.x chained-assignment

6
推荐指数
1
解决办法
199
查看次数

.git目录下有没有个人信息

如果我只想将整个源目录作为 tar-ball 发送给某人,我可以包含 .git 还是其中有任何个人信息?

完美的方案是让另一个人解压目录并在那里开始自己的分叉,可以这么说,除了提交中我的名字外,没有任何我作为前“所有者”的痕迹。那可能吗?

git

5
推荐指数
2
解决办法
1225
查看次数