【问题标题】:Floating point operations in linux kernel module (again)linux内核模块中的浮点运算(再次)
【发布时间】:2017-06-14 07:02:59
【问题描述】:

我在 StackOverflow 中搜索了很多其他问题,但都没有真正解决我的问题。

我正在编写一个 linux 内核模块,我需要通过将一个整数除以另一个整数来计算百分比值,以获得介于 0 和 100 之间的浮点值:

int v1 = 5;
int v2 = 25;
float perc = v1 / v2;

由于我们已经知道的所有原因,当我尝试编译它时,我得到“SSE register return with SSE disabled”错误。

是否有一种解决方法可以在 Linux 内核模块中计算这种除法?

非常感谢。 安东尼奥

【问题讨论】:

    标签: linux-kernel floating-point fpu


    【解决方案1】:

    你可以只使用整数算术,例如

    int perc = 100 * v1 / v2;
    

    这将给出一个整数百分比。如果您需要高于 1% 的分辨率,请使用大于 100 的比例因子并根据需要插入小数点以进行显示。

    【讨论】:

    • +1 在内核中做浮点的正确方法是不做。 OP:你必须用浮点数来做这件事有什么原因吗?
    • FOP 不是必须的,@Paul 提供的解决方法解决了问题。
    • 以防万一有人还没有用谷歌搜索为什么内核空间中不允许浮点运算,这里有一个邮件列表线程试图解释它。 spinics.net/lists/newbies/msg30262.html
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2012-04-11
    • 2013-12-17
    相关资源
    最近更新 更多