有四个vars:
short mantissa,
exponent,
base;
long double factor;
如何检查这三个组件中的每一个以确保结果符合要求?或者可以将其作为用户责任,以确保提供的数据有意义?
答案 0 :(得分:2)
由于因子是浮点值(long double
),因此结果几乎总是合适的。当数字变大时,它并不总是非常精确,但除非指数大于long double
的尾数(通常为11位,通常为2 ^ 11),否则它永远不会溢出。 / p>
如果您想对粗略进行粗略检查,请计算答案,然后检查它是否在合理范围内,例如[10 ^ 20,10 ^ -20]。
答案 1 :(得分:2)
基本上你不能完全这样做,因为标准未指定long double
存储数据的格式。不过,您可以通过与numeric_limits<long double>::digits
,numeric_limits<long double>::radix
,numeric_limits<long double>::min_exponent
和numeric_limits<long double>::max_exponent
进行比较来估算您想要的内容。
答案 2 :(得分:0)
float.h/cfloat标题给出了一些最大值和最小值,您可以从中获得位限制,但这看起来有点尴尬;我个人会做的是将mantissa
,exponent
和base
的限制明确地定义为您支持的每个平台的常量,并使用#pragma警告和注释来处理您的平台不承认。