3

我想将 Double 转换为 GLfloat。我想用它来做比较。

xM <- newIORef 0.0
zM <- newIORef 0.0
mobs <- newIORef []
mapM_ (\x -> colision x xM) mobs

mobs 充满了一种方法。

colision mob xC = do
  xcama <- get xC
  --zcama <- get zC
  let menor = mob!!0
  let mayor = mob!!7
  --if xm>= xmin && xm <= xmax && zm >= zmin && zm <= zmax  then renderText (1, (-1.4)) $ "Dead"
  --else renderText (1, (-1.4)) $ "Warning..."
  renderText (1, (-1.4)) $ "Warning..."

当我尝试编译它时,会显示此错误:

“无法将 'Foreign.C.Types.CDouble' 类型与 'Foreign.C.Types.CFloat' 预期类型匹配:GLfloat

实际类型:GLdouble

- - -解决方案: - - -

我使用这段代码:

import GHC.Float
  d2f = realToFrac :: GLdouble -> GLfloat
4

2 回答 2

8

用于在不同浮点类型(以及其他一些类型,例如Rational)之间进行转换的通用函数是realToFrac.

于 2014-05-25T03:12:37.803 回答
0

快点:

   import Unsafe.Coerce(unsafeCoerce)
   import GHC.Float(double2Float)
   doubleToGF = unsafeCoerce . double2Float :: Double -> GLfloat

我一直希望有一种方法可以减少 Data.Coerce 的“不安全”。目前还没有出炉

于 2015-04-13T03:18:38.227 回答