我正在玩一个简单的递归公式并注意到代码
p = 2.0
while p < 3.0:
print p
p = (6+p)**(0.5)
Run Code Online (Sandbox Code Playgroud)
将打印
*snip*
...
2.99999999952
2.99999999992
2.99999999999
3.0
3.0
3.0
3.0
3.0
3.0
Run Code Online (Sandbox Code Playgroud)
当然在2.99999999999和3.0(以及之前)之间会有某种近似,但这里实际发生了什么?对我来说,似乎奇怪的是,浮点3.0将被解释为不是3.0的东西,但仍然足够接近被称为3.0,连续几次.
我做错了什么,代码方面,这里还是我的解释是正确的?我若是,为什么会这样呢?
我试图使用抽象/接口类的向量Base作为函数的参数g(在main.cpp),以便我可以将派生类的向量作为参数传递。
由于我无法拥有 的实例Base,因此我尝试传递唯一指针的向量 - 因为这似乎是执行此操作的首选方法。但是,由于某种原因,我不被允许从 转换vector<unique_ptr<Test::A>>为vector<unique_ptr<Test::Base>>,我不明白为什么。
问题:为什么这是不允许的,我该如何解决?
\nmodule.hpp看起来像这样:
#ifndef _MODULE_HPP\n#define _MODULE_HPP\n\nnamespace Test\n{\n class Base\n {\n public:\n virtual ~Base(){};\n\n virtual int f(int a, int b) = 0;\n };\n\n class A : public Base\n {\n public:\n A();\n ~A() = default;\n\n int f(int a, int b);\n };\n}\n\n#endif\nRun Code Online (Sandbox Code Playgroud)\nmodule.cpp看起来像这样:
#include <module/module.hpp>\n\nTest::A::A() {}\n\nint Test::A::f(int a, int b)\n{\n return a + b;\n};\nRun Code Online (Sandbox Code Playgroud)\nmain.cpp看起来像这样: