阅读:1556回复:4
请问在内核里怎么支持float型?
我想在内核里支持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处理是正确的? |
|
沙发#
发布于:2002-12-09 09:20
建议你将浮点操作转化为整数操作,或者自己实现一套浮点操作函数,这样从调试到维护可能更简便,而且结果总是确定的。
|
|
板凳#
发布于:2002-12-09 09:39
我看了DDK文档,他也说除非十分必要,不要轻易使用float处理,它说会影响到内核的效率,可是我想,它既然提到可以处理float数,那就应该可以,如果我自己写一套float处理可能太难点,太长的数据不是那么容易处理。
所以我总想试试,可是做了几个操作之后,我却不知道我所做的操作是否正确! 哪位大侠知道,请指点! |
|
地板#
发布于:2002-12-09 10:36
用下面两个函数:
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL); KFLOATING_SAVE FloatSave; NTSTATUS status = KeSaveFloatingPointState(&FloatSave); if (NT_SUCCESS(status)) { ... KeRestoreFloatingPointState(&FloatSave); } |
|
|
地下室#
发布于:2002-12-09 11:11
我知道这两个函数,这位大侠是否真正的做过?
ddk里支持数学函数吗? 现在我只是想知道我所处理的东东是否正确,最简单的开平方就行,softice里的real32是什么意思?我用softice得到的东西好象不知啊,只是一个简单的1.0: value = 1.0这个简单的东西,用softice看起来好象都不对,这里是不是有什么猫腻?呵呵 |
|