float type and type casting

wanderer 发表于 2008-05-05 20:35:37

From /usr/include/limits.h
---------------------------------------------------limits.h---------------------------------------------------
[code/]
/* Minimum and maximum values a `signed long int' can hold.  */
#  if __WORDSIZE == 64
#   define LONG_MAX    9223372036854775807L
#  else
#   define LONG_MAX    2147483647L
#  endif
#  define LONG_MIN    (-LONG_MAX - 1L)

/* Maximum value an `unsigned long int' can hold.  (Minimum is 0.)  */
#  if __WORDSIZE == 64
#   define ULONG_MAX    18446744073709551615UL
#  else
#   define ULONG_MAX    4294967295UL
#  endif

#  ifdef __USE_ISOC99

/* Minimum and maximum values a `signed long long int' can hold.  */
#   define LLONG_MAX    9223372036854775807LL
#   define LLONG_MIN    (-LLONG_MAX - 1LL)

#  endif /* ISO C99 */
[/code]
------------------------------------------------------------------------------------------------------------------

2^32 ==                       4,294,967,296(10位)
2^31 ==                       2,147,483,648
               98,765,432,109,876,543,210
2^64 == 18,446,744,073,709,551,616(20位)
2^63 ==   9,223,372,036,854,775,808
long long 类型可以处理18位整数的. (!)

减少强制类型转换, 在一个处理double和long long类型的程序里, 老是出莫名的问题. --问题就在这个转换上。
e.g. 一个double类型, 打印时是5.000000, 可是打印到小数点后15位时, 却是4.999999..., 强制转换成int类型后的值是4.
尤其是,long long->强制转换->double->进行运算->强制转换->long long”, 这样很可能产生误差.
关键词(Tag): language

收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定