小编Max*_*Max的帖子

接近x.0时的奇怪的Python行为

我正在玩一个简单的递归公式并注意到代码

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,连续几次.

我做错了什么,代码方面,这里还是我的解释是正确的?我若是,为什么会这样呢?

python floating-accuracy

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

如何使用抽象/接口类的向量作为函数参数?

我试图使用抽象/接口类的向量Base作为函数的参数g(在main.cpp),以便我可以将派生类的向量作为参数传递。

\n

由于我无法拥有 的实例Base,因此我尝试传递唯一指针的向量 - 因为这似乎是执行此操作的首选方法。但是,由于某种原因,我不被允许从 转换vector<unique_ptr<Test::A>>vector<unique_ptr<Test::Base>>,我不明白为什么。

\n

问题:为什么这是不允许的,我该如何解决?

\n

module.hpp看起来像这样:

\n
#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\n
Run Code Online (Sandbox Code Playgroud)\n

module.cpp看起来像这样:

\n
#include <module/module.hpp>\n\nTest::A::A() {}\n\nint Test::A::f(int a, int b)\n{\n    return a + b;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

main.cpp看起来像这样:

\n …

c++ abstract-class arguments vector c++17

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