我想做的是:
取一个双(介于-1和1之间),并将其抛到浮子上。但我想确保浮点数总是小于两倍。
有什么直截了当的方法吗?
作为参考,这是我想出的一些东西。
float DoubleToSmallerFloat (double X) // ex. X = 0.79828470019999997
{
float Y = X; // 0.79828471 -> note this is greater than X
double Diff = X - Y;
return Y - Abs (Diff) * 10;
}发布于 2016-08-11 21:11:44
我认为这是一个很好的问题。看看IEEE 754单精度和双精度二进制浮点格式。

。

用给定的有偏符号s、指数e(8位无符号整数)和23位分数(尾数)的给定32位binary32数据所假定的实际值为
s * m * (2 ^(e-127)), 其中m是

用于双用1023而不是127:s * m * (2 ^(e-1023))
第一种情况下,是指数e,并在双浮法下保存它的值.浮点尾数几乎是双尾数的第一位。您需要稍微减少浮点尾数的值。
第二个病例。浮子指数(e-127)大于双倍指数(e-1023) .那么我希望这个分数部分是23个零。好的。将指数部分和设定分数部分降至23。要获得字段的访问权限,请使用union。
union {
float fl;
uint32_t dw;
} f;
int s = ( f.dw >> 31 ) ? -1 : 1; /* sign */
int e = ( f.dw >> 23 ) & 0xFF; /* exponent */
int fract = f.dw & 0x7FFFFF; /* fraction */发布于 2016-08-11 21:29:59
如果您能够使用C++11,那么您可以为此使用nextafter():
float doubleToSmallerFloat(double x) {
float f = x;
return f < x ? f : nextafter(f, -1.0f);
}https://stackoverflow.com/questions/38904992
复制相似问题