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

被折叠的 条评论
为什么被折叠?



