bigbigtree
驱动牛犊
驱动牛犊
  • 注册日期2002-12-06
  • 最后登录2002-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1556回复:4

请问在内核里怎么支持float型?

楼主#
更多 发布于:2002-12-09 08:51
我想在内核里支持float型,DDK文档里这么写:
KFLOATING_SAVE     saveData;
NTSTATUS         status;
double         floatValue;

status = KeSaveFloatingPointState(&saveData);

if (NT_SUCCESS(status)) {

    floatValue = 1.0;
    KeRestoreFloatingPointState(&saveData);
}
可是我用softice打印不出float型值,softice是这样写的:
real32 floatValue = xxx.exx-32
而且xxx根本不是1.0,用DbgPrint也打不出float型来!
后来我又做了些操作,作了一些float处理,可是我不知道我所做的结果是不是正确的?
我怎么才能知道我的float处理是正确的?
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-09 09:20
建议你将浮点操作转化为整数操作,或者自己实现一套浮点操作函数,这样从调试到维护可能更简便,而且结果总是确定的。
bigbigtree
驱动牛犊
驱动牛犊
  • 注册日期2002-12-06
  • 最后登录2002-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-09 09:39
我看了DDK文档,他也说除非十分必要,不要轻易使用float处理,它说会影响到内核的效率,可是我想,它既然提到可以处理float数,那就应该可以,如果我自己写一套float处理可能太难点,太长的数据不是那么容易处理。
所以我总想试试,可是做了几个操作之后,我却不知道我所做的操作是否正确!

哪位大侠知道,请指点!
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-09 10:36
用下面两个函数:

ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
KFLOATING_SAVE FloatSave;
NTSTATUS status = KeSaveFloatingPointState(&FloatSave);
if (NT_SUCCESS(status))
{
  ...
  KeRestoreFloatingPointState(&FloatSave);
}
生命驱动,活力无限!
bigbigtree
驱动牛犊
驱动牛犊
  • 注册日期2002-12-06
  • 最后登录2002-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-09 11:11
我知道这两个函数,这位大侠是否真正的做过?
ddk里支持数学函数吗?
现在我只是想知道我所处理的东东是否正确,最简单的开平方就行,softice里的real32是什么意思?我用softice得到的东西好象不知啊,只是一个简单的1.0: value = 1.0这个简单的东西,用softice看起来好象都不对,这里是不是有什么猫腻?呵呵
游客

返回顶部