检测嵌入式系统上的长双溢出

时间:2011-03-12 06:37:06

标签: c++ overflow long-double

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

2 个答案:

答案 0 :(得分:1)

您需要的状态"大数字",但这并不一定意味着指示使用long double。在我所知道的大多数嵌入式应用中,选择long double是因为其增强的精度,即分数的分辨率比其增加的范围更多。

您还声明您的实现几乎不提供通常的浮点库和/或功能。根据这些陈述,我会质疑您是否需要全功能的浮点功能。如果您的问题仅限于"大数字",请检查您的编译器是否提供 long long 数据类型,这是64位整数。

如果确实需要一些浮点功能,可以考虑使用定点实现。假设有很长的长,您可以选择以48.16格式表示数字,这将允许~2.8x10 ^ 14的数字,在十进制的右边有16位。 (如果需要定点计算的介绍,请启动here。)

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

答案 1 :(得分:0)

由于它不是标准的C ++,因此您必须依赖于特定环境提供的方法。嵌入式系统的制造商应该记录它是如何完成的。问他。