游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2959|回复: 2

请问这两个从double到float的强制类型转换哪一个更正确?

[复制链接]

18

主题

47

帖子

47

积分

注册会员

Rank: 2

积分
47
发表于 2005-11-5 11:22:00 | 显示全部楼层 |阅读模式

一个用作单位化的数学函数Normalize
        void Normalize()
        {
                  float MagSq = x*x + y*y + z*z;
          
                  float OneOverMag = 1.0f / sqrt( MagSq );//sqrt返回的是double型的所以要进行强制转换到float型的。

                   x *= OneOverMag;

                   y *= OneOverMag;

                   z *= OneOverMag;   
        }
========================================


<1> float OneOverMag = 1.0f / (float)sqrt( MagSq ) ;


<2> float OneOverMag = (float)(1.0f / sqrt( MagSq )) ;


请问这两种强制从double到float的类型转换,哪一个更正确?还是都一样?







1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2005-11-5 22:14:00 | 显示全部楼层

Re:请问这两个从double到float的强制类型转换哪一个更正确?

没必要转换,,浮点数在FPU上都是转成80位来算的

另外有sqrtf返回的是float型

18

主题

47

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2005-11-6 00:44:00 | 显示全部楼层

Re:请问这两个从double到float的强制类型转换哪一个更正确?

没必要转换,,浮点数在FPU上都是转成80位来算的

另外有sqrtf返回的是float型


---------------------------------------

VC++.Net编译器中 sqrt函数的返回值是double型的,把double型的计算结果如果不转换就赋给float类型的变量,是会丢失数据的。而且编译的时候如果不转换的话,编译器也会发出warnning,告诉你从一个double型的值赋给一个float变量可能丢失数据。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 13:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表