我们知道,由于数字的二进制表示,此表达式的计算结果为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.0
是False
math.isclose(1.0e-100 , 0.0)
Run Code Online (Sandbox Code Playgroud) 只是出于兴趣......
如果我要设计一个容器库,我肯定会从一个公共基类派生它们,它们会有(也许是抽象的)方法声明,如size()
和insert()
.
标准库容器是否有充分的理由不能像这样实现?
我想使用AWK打印文件的每个第N行.我尝试修改一般格式: -
awk '0 == NR % 4' results.txt
至:-
awk '0 == NR % $ct' results.txt
Run Code Online (Sandbox Code Playgroud)
其中'ct'是应跳过的行数.它不起作用.有人可以帮帮我吗?提前致谢.
这是詹姆斯对这个问题的答案的一个(另一个)跟进:扁平化迭代器
如何更改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倍.
优点:
缺点:
其他利弊?
这个最小的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++ 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的回答:
使用哑指针(原始指针)或对资源的非拥有引用的引用,当>你知道资源将比引用对象/范围更长时.当您需要可空性或可重置性时,首选引用和>使用原始指针.
如果这就是全部,我接受这个问题已被关闭.
如果我想避免它的实例,那么使基类构造函数受到保护是一种好习惯吗?我知道我也可以使用纯虚拟虚拟方法,但这看起来很奇怪......
请考虑以下代码:
#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++编写的代码移植到D.有一次,我介绍了一个包含赋值的便捷宏.喜欢
#define so_convenient(x) value = some_func(x,#x)
Run Code Online (Sandbox Code Playgroud)
所以我正在使用宏
访问实际的符号及其字符串和
做作业.
我如何在D中实现这一目标?
我猜这两个问题是相关的,因此我将它们一起发布:
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) 如果我只想将整个源目录作为 tar-ball 发送给某人,我可以包含 .git 还是其中有任何个人信息?
完美的方案是让另一个人解压目录并在那里开始自己的分叉,可以这么说,除了提交中我的名字外,没有任何我作为前“所有者”的痕迹。那可能吗?
c++ ×5
python ×2
python-3.x ×2
awk ×1
c ×1
c++11 ×1
constructor ×1
d ×1
gcc ×1
git ×1
inheritance ×1
iterator ×1
macros ×1
math ×1
openmp ×1
precision ×1
stl ×1
type-hinting ×1