Jesse's Blog » 日志 » float type and type casting
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”, 这样很可能产生误差.
---------------------------------------------------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”, 这样很可能产生误差.
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
