有四个变量:
我该如何检查这三个组件中的每一个,以确保结果适合因子?或者是将其留给用户来确保提供的数据有意义呢?
short mantissa,
exponent,
base;
long double factor;
我该如何检查这三个组件中的每一个,以确保结果适合因子?或者是将其留给用户来确保提供的数据有意义呢?
short mantissa,
exponent,
base;
long double factor;
由于因子是一个浮点值(long double
),所以结果几乎总是适合的。当数字变大时,它不总是非常精确,但除非指数大于long double
的曼蒂萨(通常为11位,因此通常为2 ^ 11),否则它永远不会溢出。
如果您想进行粗略的精度检查,请计算答案,然后检查它是否在合理范围内,例如[10 ^ 20,10 ^ -20]。
基本上,你不能完全这样做,因为long double
存储数据的格式未经标准规定。然而,你可以通过比较numeric_limits<long double>::digits
、numeric_limits<long double>::radix
、numeric_limits<long double>::min_exponent
和numeric_limits<long double>::max_exponent
来近似实现你想要的内容。
float.h/cfloat头文件提供了一些最大值和最小值,您可以从中推导出位限制,但这似乎有点笨拙;个人建议是明确定义每个平台上 mantissa、exponent 和 base 的极限常数,并使用 #pragma 警告和注释来处理不认识的平台。