小编Nic*_*ick的帖子

如何在没有下溢的情况下计算对数空间中的总和?

我正在尝试计算log(a + b)给定log(a)log(b)。问题是,log(a)而且log(b)非常消极,以至于当我尝试计算ab它们自己时,它们下溢,我得到log(0),这是未定义的。

对于log(a * b)and log(a / b),这不是问题,因为log(a * b) = log(a) + log(b)and log(a / b) = log(a) - log(b)。有没有类似的方法来计算log(a + b)而不需要ab他们自己,避免下溢?

language-agnostic floating-point precision logarithm underflow

12
推荐指数
1
解决办法
330
查看次数

什么是普通 C 中的向量?

我只是在编译一个 C 文件并犯了一个错字:交换argc[0]argv[0]. 当然,这给了我来自 gcc 的错误消息:

SlidingWindow_file.c:443:29: error: subscripted value is neither array nor pointer nor vector
Run Code Online (Sandbox Code Playgroud)

这个错误消息对我来说很有意义,除了一件事:什么是普通 C 上下文中的向量(看看这是一个 C 文件,而不是 C++)?我似乎无法找到有关此类事情的任何信息。

c vector

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

混合 C 和 C++ 代码时, main() 是否需要在 C++ 部分?

我有一个 C 程序,需要与 C++ 库 ( ROS )进行交互。通常,通过使用extern "C"和使用 C++ 编译器进行链接的包装器将 C 代码与 C++ 代码连接起来并不太困难,但我从来没有main在 C 部分的地方这样做过。

C ++ FAQ表示这是一件坏事:

以下是一些要点(尽管某些编译器供应商可能不需要所有这些;请查看您的编译器供应商的文档):

  • 编译时必须使用 C++ 编译器main()(例如,用于静态初始化)

但是我看到另一个消息来源说这几天应该没问题

曾经,大多数 C++ 编译器要求该函数main由 C++ 编译器编译。这种要求在今天并不常见,......

为什么main在 C 部分或 C++ 部分很重要?如果我今天尝试使用常见的链接器(主要是 GCC 和 Clang 的)将代码链接到 C 部分中的代码,我会遇到多少麻烦?

c c++ linker gcc clang

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

回调虚函数

我正在使用嵌入式平台上的线程做一些工作.这个平台提供了一个Thread类,它有一个start带有函数指针的方法,如下所示:

void do_in_parallel() {
    // Some stuff to do in a new thread
}

Thread my_thread;
my_thread.start(do_in_parallel);
Run Code Online (Sandbox Code Playgroud)

问题是没有办法传递参数.1我想通过创建一个抽象类来调用它Thread2,调用它,扩展Thread(或者它可以只有一个Thread实例数据).

Thread2将有一个纯虚函数void run(),目标是将其传递给Thread::start(void*()),除了我很快就知道成员函数指针有不同的类型,不能像这样使用.我可以制作run()静态,但后来我仍然不能有多个实例,打败了整个目的(更不用说你不能拥有虚拟静态功能).

是否存在任何不涉及更改原始Thread类的变通方法(考虑到它是一个我原来坚持的库)?


1.在许多情况下,全局变量是一种可用的解决方法,除非从同一函数指针实例化多个线程.在这种情况下,我无法想出一种避免竞争条件的方法.

c++ multithreading callback

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

只清除结构的位域成员?

我有一个struct喜欢以下内容:

struct Foo {
    unsigned int id;
    unsigned int flag_1 : 1;
    unsigned int flag_2 : 1;
    unsigned int flag_3 : 1;
    // Some arbitrary number of further flags. Code is
    // automatically generated and number will vary.
    // Notably, it may be more than an int's worth.
    int some_data;
    float some_more_data;
    // ...
};
Run Code Online (Sandbox Code Playgroud)

有时,我需要将所有标志重置为零,同时保留结构的其余部分。一种方法显然是将每个标志单独设置为 0,但感觉应该有一种方法可以一举完成。那可能吗?

(请注意,我愿意不使用位域,但这些代码有时会在内存受限的系统上运行,因此节省的内存非常吸引人。)

编辑:

这里有一个类似的问题:Reset all bits in ac bitfield

但是,该问题中的结构完全是位域。我不能memset在这里简单地将整个结构归零,并且不能保证涉及联合的其他答案有效,尤其是当标志的价值超过 int 时。

c bit-fields

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

如何获取模板内 Flask 蓝图的名称?

我有一个用 Flask 构建的网站。它有几个部分,每个部分都有一个专用的蓝图。每个蓝图中的模板都扩展了一个基本模板,该模板具有每个页面的基本布局,包括带有每个部分选项卡的导航栏。

我想让基本模板突出显示当前选项卡,因此它需要知道哪个蓝图的视图正在处理请求。

我想出的一种方法是before_request向每个蓝图添加一个处理程序并将名称存储在g

bp = Blueprint('blog', __name__, url_prefix='/blog')

@bp.before_request
def set_bp_name():
    g.section = 'blog'
Run Code Online (Sandbox Code Playgroud)

但是 Flask 必须知道哪个蓝图正在处理请求(如果有),并且蓝图当然知道它自己的名称。有没有一种方法可以让模板获取当前蓝图的名称,而不需要修改每个蓝图?

python flask

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