【发布时间】:2013-02-09 23:20:25
【问题描述】:
我正在尝试使用 C 中的位运算来舍入浮点数。 我首先将浮点数转换为无符号整数。 我认为我的策略应该是获取指数,然后将位归零,但我不确定如何编码。这是我到目前为止所拥有的:
float roundDown(float f);
unsigned int notRounded = *(unsigned int *)&f;
unsigned int copy = notRounded;
int exponent = (copy >> 23) & 0xff;
int fractional = 127 + 23 - exponent;
if(fractional > 0){
//not sure how to zero out the bits.
//Also don't know how to deal with the signed part.
【问题讨论】:
-
floorf()、roundf() 和相关函数可以做到这一点。这是作业吗?这对我来说似乎不太实用。
-
不,不是作业,我正在尝试学习 C 中的按位运算,这是教科书中的一个练习。我已经为此苦苦挣扎了几个小时,如果我能让它工作就好了。
-
您可能需要将尾数位全部、部分或不清零,具体取决于指数的值。你看过例如en.wikipedia.org/wiki/Single_precision,它向你展示了一个浮点的结构?另外,您的意思是“向零舍入”还是“向-无穷大舍入”?
-
看起来像一本糟糕的书,最好教有用的信息。通常你只使用一个函数,当你不需要的时候不要做一些摆弄。
-
谢谢 Oli,但我已经看过那个页面了。我了解浮点数的结构,包括有符号位、指数和 mantessa。我不知道如何将位归零。
标签: c floating-point bit-manipulation