首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFmpeg编译警告ATOMIC_VAR_INIT

FFmpeg编译警告ATOMIC_VAR_INIT
EN

Stack Overflow用户
提问于 2022-08-02 07:52:21
回答 1查看 46关注 0票数 0

在用emscripten 3.1.17编译ffmpeg (提交1368b5a)时,有两个警告,我希望互联网能帮助我更好地理解(我不是一个有丰富c++经验的人):

代码语言:javascript
复制
fftools/ffmpeg.c:339:41: warning: macro 'ATOMIC_VAR_INIT' has been marked as deprecated [-Wdeprecated-pragma]
static atomic_int transcode_init_done = ATOMIC_VAR_INIT(0);
                                        ^
/home/XYZ/ffmpeg-wasm/modules/emsdk/upstream/lib/clang/15.0.0/include/stdatomic.h:50:41: note: macro marked 'deprecated' here
#pragma clang deprecated(ATOMIC_VAR_INIT)
                                        ^

我知道在这个地方是不推荐的,但是用哪个工具(emscripten,clang)呢?以及哪一方参与了修复工作。

另一个也很有趣:

代码语言:javascript
复制
fftools/ffmpeg_filter.c:898:35: warning: floating-point comparison is always true; constant cannot be represented exactly in type 'float' [-Wliteral-range]
        if (audio_drift_threshold != 0.1)
            ~~~~~~~~~~~~~~~~~~~~~ ^  ~~~

信息和后果是非常清楚的。我不清楚的是,是如果这是特定的编译器问题,还是代码问题,哪些方面需要注意?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 11:25:09

对于ATOMIC_VAR_INIT,我找到了这张便条

这个宏是C11原子类型早期设计草案的一部分。它在C11中不需要,在C17中被废弃,在C23中被删除。

因此,反对是按照C标准(和C++标准,尽管在C++20中被废弃了)进行的。

至于浮点问题,编译器直接声明:

常量不能准确地表示为“浮动”类型

这是完全正确的。在二进制中,数字的每一点表示二的幂。在整数中这是相当容易的,比特代表1,2,4,8,16,32,64,.与0,1,2,3,4,5,6,

例如,整数:0b100101是(右边的低位):1+4+32=37。

浮点数大致相同,但还有一些复杂问题(我将在这里略过)。基本上,这些位现在代表了2的负幂: 0.5,0.25,0.125,0.0625,.但不幸的是,这并不允许我们表示所有可能的十进制数(这是一项不可能的任务,在0到1之间有无限多的十进制数,而且我们只有有限的字节数的组合)。

事实证明,0.1是不可能用二进制浮点编码的数字之一。这是合理的,因为0.1是1/2 * 1/5,而1/5不能表示为2的幂。

如果你算一算,你会发现:

2^-4 + 2^-5 + 2^-8 + 2^-9 + 2^-12 + 2^-13 = 0.0999755859375

如果您永远继续这个序列(跳过两个异能,添加两个异能,重复),那么您将无限接近0.1。但这是我们所能做的最好的。

如果您想做更多的阅读,那么下面是一些链接:

现在,我有点不确定的是:

警告:浮点比较总是正确的。

从技术上讲,0.1应该转换成一些位模式,如果然后在!=检查中抛出一个具有完全相同位模式的变量,那么结果应该是false。但也许编译器做出了一个执行决定,只是说:“永远是true",因为得到确切的位模式是极不可能的,而且是脆弱的。

但是不管是什么情况,更重要的是:float != 0.1是一个非常糟糕的测试。上面的链接比我所能做的要好得多,但基本上你永远不想测试浮点是否严格相等--你总是想要添加一个有价值的epsilon (这取决于您比较的数字)。

例如:abs(float - 0.1) < epsilon

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73203857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档