Always use Cast<f64> instead of Cast<f32>.

This commit is contained in:
Sébastien Crozet 2014-10-28 16:33:56 +01:00
parent 6b4b25acd4
commit 93b184815f
6 changed files with 16 additions and 16 deletions

View File

@ -383,7 +383,7 @@ pub fn sqdist<N: Float, P: FloatPnt<N, V>, V: Norm<N>>(a: &P, b: &P) -> N {
/// Computes a projection matrix given the frustrum near plane width, height, the field of /// Computes a projection matrix given the frustrum near plane width, height, the field of
/// view, and the distance to the clipping planes (`znear` and `zfar`). /// view, and the distance to the clipping planes (`znear` and `zfar`).
#[deprecated = "Use `Persp3::new(width / height, fov, znear, zfar).as_mat()` instead"] #[deprecated = "Use `Persp3::new(width / height, fov, znear, zfar).as_mat()` instead"]
pub fn perspective3d<N: FloatMath + Cast<f32> + Zero + One>(width: N, height: N, fov: N, znear: N, zfar: N) -> Mat4<N> { pub fn perspective3d<N: FloatMath + Cast<f64> + Zero + One>(width: N, height: N, fov: N, znear: N, zfar: N) -> Mat4<N> {
let aspect = width / height; let aspect = width / height;
let _1: N = one(); let _1: N = one();

View File

@ -500,10 +500,10 @@ impl<N: Clone> Transpose for DMat<N> {
} }
} }
impl<N: Num + Cast<f32> + Clone> Mean<DVec<N>> for DMat<N> { impl<N: Num + Cast<f64> + Clone> Mean<DVec<N>> for DMat<N> {
fn mean(m: &DMat<N>) -> DVec<N> { fn mean(m: &DMat<N>) -> DVec<N> {
let mut res: DVec<N> = DVec::new_zeros(m.ncols); let mut res: DVec<N> = DVec::new_zeros(m.ncols);
let normalizer: N = Cast::from(1.0f32 / Cast::from(m.nrows)); let normalizer: N = Cast::from(1.0f64 / Cast::from(m.nrows));
for i in range(0u, m.nrows) { for i in range(0u, m.nrows) {
for j in range(0u, m.ncols) { for j in range(0u, m.ncols) {
@ -518,7 +518,7 @@ impl<N: Num + Cast<f32> + Clone> Mean<DVec<N>> for DMat<N> {
} }
} }
impl<N: Clone + Num + Cast<f32> + DMatDivRhs<N, DMat<N>>> Cov<DMat<N>> for DMat<N> { impl<N: Clone + Num + Cast<f64> + DMatDivRhs<N, DMat<N>>> Cov<DMat<N>> for DMat<N> {
// FIXME: this could be heavily optimized, removing all temporaries by merging loops. // FIXME: this could be heavily optimized, removing all temporaries by merging loops.
fn cov(m: &DMat<N>) -> DMat<N> { fn cov(m: &DMat<N>) -> DMat<N> {
assert!(m.nrows > 1); assert!(m.nrows > 1);
@ -536,7 +536,7 @@ impl<N: Clone + Num + Cast<f32> + DMatDivRhs<N, DMat<N>>> Cov<DMat<N>> for DMat<
} }
// FIXME: return a triangular matrix? // FIXME: return a triangular matrix?
let fnormalizer: f32 = Cast::from(m.nrows() - 1); let fnormalizer: f64 = Cast::from(m.nrows() - 1);
let normalizer: N = Cast::from(fnormalizer); let normalizer: N = Cast::from(fnormalizer);
// FIXME: this will do 2 allocations for temporaries! // FIXME: this will do 2 allocations for temporaries!
(Transpose::transpose_cpy(&centered) * centered) / normalizer (Transpose::transpose_cpy(&centered) * centered) / normalizer

View File

@ -26,7 +26,7 @@ macro_rules! iso_impl(
macro_rules! rotation_matrix_impl( macro_rules! rotation_matrix_impl(
($t: ident, $trot: ident, $tlv: ident, $tav: ident) => ( ($t: ident, $trot: ident, $tlv: ident, $tav: ident) => (
impl<N: Cast<f32> + FloatMath + Num + Clone> impl<N: Cast<f64> + FloatMath + Num + Clone>
RotationMatrix<N, $tlv<N>, $tav<N>, $trot<N>> for $t<N> { RotationMatrix<N, $tlv<N>, $tav<N>, $trot<N>> for $t<N> {
#[inline] #[inline]
fn to_rot_mat(&self) -> $trot<N> { fn to_rot_mat(&self) -> $trot<N> {
@ -153,7 +153,7 @@ macro_rules! translate_impl(
macro_rules! rotation_impl( macro_rules! rotation_impl(
($t: ident, $trot: ident, $tav: ident) => ( ($t: ident, $trot: ident, $tav: ident) => (
impl<N: Cast<f32> + FloatMath + Clone> Rotation<$tav<N>> for $t<N> { impl<N: Cast<f64> + FloatMath + Clone> Rotation<$tav<N>> for $t<N> {
#[inline] #[inline]
fn rotation(&self) -> $tav<N> { fn rotation(&self) -> $tav<N> {
self.rotation.rotation() self.rotation.rotation()

View File

@ -205,7 +205,7 @@ impl<N: Clone + Float> Rot3<N> {
} }
} }
impl<N: Clone + FloatMath + Cast<f32>> impl<N: Clone + FloatMath + Cast<f64>>
Rotation<Vec3<N>> for Rot3<N> { Rotation<Vec3<N>> for Rot3<N> {
#[inline] #[inline]
fn rotation(&self) -> Vec3<N> { fn rotation(&self) -> Vec3<N> {

View File

@ -122,7 +122,7 @@ macro_rules! dim_impl(
macro_rules! rotation_matrix_impl( macro_rules! rotation_matrix_impl(
($t: ident, $tlv: ident, $tav: ident) => ( ($t: ident, $tlv: ident, $tav: ident) => (
impl<N: Cast<f32> + FloatMath> RotationMatrix<N, $tlv<N>, $tav<N>, $t<N>> for $t<N> { impl<N: Cast<f64> + FloatMath> RotationMatrix<N, $tlv<N>, $tav<N>, $t<N>> for $t<N> {
#[inline] #[inline]
fn to_rot_mat(&self) -> $t<N> { fn to_rot_mat(&self) -> $t<N> {
self.clone() self.clone()

View File

@ -154,7 +154,7 @@ impl<N: Float> Basis for Vec3<N> {
} }
// FIXME: this bad: this fixes definitly the number of samples… // FIXME: this bad: this fixes definitly the number of samples…
static SAMPLES_2_F32: [Vec2<f32>, ..21] = [ static SAMPLES_2_F64: [Vec2<f64>, ..21] = [
Vec2 { x: 1.0, y: 0.0 }, Vec2 { x: 1.0, y: 0.0 },
Vec2 { x: 0.95557281, y: 0.29475517 }, Vec2 { x: 0.95557281, y: 0.29475517 },
Vec2 { x: 0.82623877, y: 0.56332006 }, Vec2 { x: 0.82623877, y: 0.56332006 },
@ -179,7 +179,7 @@ static SAMPLES_2_F32: [Vec2<f32>, ..21] = [
]; ];
// Those vectors come from bullet 3d // Those vectors come from bullet 3d
static SAMPLES_3_F32: [Vec3<f32>, ..42] = [ static SAMPLES_3_F64: [Vec3<f64>, ..42] = [
Vec3 { x: 0.000000 , y: -0.000000, z: -1.000000 }, Vec3 { x: 0.000000 , y: -0.000000, z: -1.000000 },
Vec3 { x: 0.723608 , y: -0.525725, z: -0.447219 }, Vec3 { x: 0.723608 , y: -0.525725, z: -0.447219 },
Vec3 { x: -0.276388, y: -0.850649, z: -0.447219 }, Vec3 { x: -0.276388, y: -0.850649, z: -0.447219 },
@ -231,25 +231,25 @@ impl<N: One + Clone> UniformSphereSample for Vec1<N> {
} }
} }
impl<N: Cast<f32> + Clone> UniformSphereSample for Vec2<N> { impl<N: Cast<f64> + Clone> UniformSphereSample for Vec2<N> {
#[inline(always)] #[inline(always)]
fn sample(f: |Vec2<N>| -> ()) { fn sample(f: |Vec2<N>| -> ()) {
for sample in SAMPLES_2_F32.iter() { for sample in SAMPLES_2_F64.iter() {
f(Cast::from(*sample)) f(Cast::from(*sample))
} }
} }
} }
impl<N: Cast<f32> + Clone> UniformSphereSample for Vec3<N> { impl<N: Cast<f64> + Clone> UniformSphereSample for Vec3<N> {
#[inline(always)] #[inline(always)]
fn sample(f: |Vec3<N>| -> ()) { fn sample(f: |Vec3<N>| -> ()) {
for sample in SAMPLES_3_F32.iter() { for sample in SAMPLES_3_F64.iter() {
f(Cast::from(*sample)) f(Cast::from(*sample))
} }
} }
} }
impl<N: Cast<f32> + Clone> UniformSphereSample for Vec4<N> { impl<N: Cast<f64> + Clone> UniformSphereSample for Vec4<N> {
#[inline(always)] #[inline(always)]
fn sample(_: |Vec4<N>| -> ()) { fn sample(_: |Vec4<N>| -> ()) {
panic!("UniformSphereSample::<Vec4<N>>::sample : Not yet implemented.") panic!("UniformSphereSample::<Vec4<N>>::sample : Not yet implemented.")