如何进行正确的尺寸检查?

时间:2010-11-27 19:47:03

标签: c++

有四个vars:

short mantissa,  
exponent,  
base;  
long double factor;

如何检查这三个组件中的每一个以确保结果符合要求?或者可以将其作为用户责任,以确保提供的数据有意义?

3 个答案:

答案 0 :(得分:2)

由于因子是浮点值(long double),因此结果几乎总是合适的。当数字变大时,它并不总是非常精确,但除非指数大于long double的尾数(通常为11位,通常为2 ^ 11),否则它永远不会溢出。 / p>

如果您想对粗略进行粗略检查,请计算答案,然后检查它是否在合理范围内,例如[10 ^ 20,10 ^ -20]。

答案 1 :(得分:2)

基本上你不能完全这样做,因为标准未指定long double存储数据的格式。不过,您可以通过与numeric_limits<long double>::digitsnumeric_limits<long double>::radixnumeric_limits<long double>::min_exponentnumeric_limits<long double>::max_exponent进行比较来估算您想要的内容。

答案 2 :(得分:0)

float.h/cfloat标题给出了一些最大值和最小值,您可以从中获得位限制,但这看起来有点尴尬;我个人会做的是将mantissaexponentbase的限制明确地定义为您支持的每个平台的常量,并使用#pragma警告和注释来处理您的平台不承认。