Конвертировать double в GLfloat в Haskell
Я хочу конвертировать 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
2 ответа
Общая функция, используемая для преобразования между различными типами с плавающей запятой (и некоторыми другими, такими как Rational
) является realToFrac
,
Быстрее:
import Unsafe.Coerce(unsafeCoerce)
import GHC.Float(double2Float)
doubleToGF = unsafeCoerce . double2Float :: Double -> GLfloat
Я хотел найти способ сделать это менее "небезопасным" с помощью Data.Coerce. Пока не получилось