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

5
有四个变量:
short mantissa,  
exponent,  
base;  
long double factor;

我该如何检查这三个组件中的每一个,以确保结果适合因子?或者是将其留给用户来确保提供的数据有意义呢?

等一下,你的意思是“适合”是指幅度可以被表示出来,还是你真的关心精度的丢失? - Yakov Galka
3个回答

2

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

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


2

基本上,你不能完全这样做,因为long double存储数据的格式未经标准规定。然而,你可以通过比较numeric_limits<long double>::digitsnumeric_limits<long double>::radixnumeric_limits<long double>::min_exponentnumeric_limits<long double>::max_exponent来近似实现你想要的内容。


0

float.h/cfloat头文件提供了一些最大值和最小值,您可以从中推导出位限制,但这似乎有点笨拙;个人建议是明确定义每个平台上 mantissa、exponent 和 base 的极限常数,并使用 #pragma 警告和注释来处理不认识的平台。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接