double -> long

本文探讨了浮動小数点型与汎整数型之间的转换规则及注意事项,包括转换过程中可能出现的溢出问题及其在不同编译器上的表现差异。并讨论了在VC6和VS2005等环境中实现这些转换的具体方式。

 

http://www9.plala.or.jp/sgwr-t/detail/TypeConversion.html

 

 

(2) 浮動小数点型と汎整数型

a)浮動小数点型 ⇒ 汎整数型
小数部は捨てられます。
整数部の値が汎整数型で表現できない場合は、その動作は未定義となります。
表現できる場合は整数部は不変になります。
b)汎整数型 ⇒ 浮動小数点型
表現できる範囲内にあるが、正確に表現できないならば処理系定義の方法で、最も近い値を選びます。

 

double 转 long 如果 double 比较大 溢出

行为未定义。

比如在用VS2005编译NT X86与WinCE ARM 上的结果不同。
看上去WinCE中的结果与VC6相同。

在vs2005修改一个标志位
extern "C" int __sse2_available;
让它为0,结果与VC6相同。

VC6里面实际是先转为__int64,再long

其实返回什么东西也不合适,应该像delphi那样throw exception。

Int64 System.Trunc(Real);

delphi 中如果Int64->Cardinal 截断,没有exception。

x86上可以用CPU的FPU控制字,让它出现exception。

最可靠的办法是专门写macro或者函数用来转换。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值