3

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..."

コンパイルしようとすると、次のエラーが表示されます。

「タイプ '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 に答える