c++ - 检测嵌入式系统上的长双倍溢出

标签 c++ overflow long-double

我将在嵌入式系统的 C++ 代码中使用大数。幸运的是,编译器可以识别长 double 。
我不能使用标准库、boost 库、gnu 数学库等。而且系统没有内置 float math cpu。
现在如何检测长双溢出?

最佳答案

您声明您需要“大数字”,但这并不一定意味着指示使用 long double。在我所知道的大多数嵌入式应用程序中,选择 long double 是因为它具有更高的精度,即小数的分辨率比其增加的范围更多。

您还声明您的实现提供了很少的常用浮点库和/或功能。基于这些陈述,我会质疑您是否需要功能齐全的浮点功能。如果您只关心“大数”,请检查您的编译器是否提供 long long 数据类型,这是一个 64 位整数。

如果您确实需要一些浮点功能,您可以考虑定点实现。假设一个 long long,您可以选择以 48.16 格式表示数字,这将允许 ~2.8x10^14 的数字在小数点右侧有 16 位。 (如果您需要介绍定点计算,请从 here 开始。)

解决了一些背景问题后,让我们看看原来的问题。如果您希望检测 unsigned int 中的溢出(我在嵌入式工作中经常这样做),将最新结果与前一个结果进行比较就足够了。例如,我的应用程序要求我定期检查由外部时钟驱动的 16 位计数器。如果我当前的观察值小于上次观察值,那么我可以假设 16 位计数器溢出,我可以采取相应的措施。如果您使用 long long 整数数据类型实现大数,则可以应用类似的策略来检测溢出。

关于c++ - 检测嵌入式系统上的长双倍溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281038/

相关文章:

html - 如何选择包装的 HTML 元素?

与数据结构对齐混淆?

c++ - QVTKOpenGLWidget 和 vtkGenericOpenGlRenderWindow 与 QTDesigner

c# - 当 C++ 调用 C# 函数时,如何从 C# 调用 C++ 委托(delegate)函数?

c++ - 涉及嵌套模板的 MSVC 编译器错误

javascript - Bootstrap轮播溢出:Hidden Breaks Dropup Button

c++ - http 中的范围下载

css - 盒子装饰打破溢出

C++ fabs(long double) 编译器警告

c++ - 输出精度高于 double