在Haskell中将double转换为GLfloat

时间:2014-05-25 02:46:51

标签: opengl haskell double floating-point-conversion

我想将Double转换为GLfloat。 我想用它进行比较。

xM <- newIORef 0.0
zM <- newIORef 0.0
mobs <- newIORef []
mapM_ (\x -> colision x xM) 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..."

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

&#34;无法匹配&#39; Foreign.C.Types.CDouble&#39;与&#39; Foreign.C.Types.CFloat&#39; 预期类型:GLfloat

实际类型:GLdouble

-----解决方案:------

我使用此代码:

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

更快:

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

我一直希望通过Data.Coerce来减少“不安全”。尚未淘汰