【问题标题】:Float value - Basics [closed]浮点值 - 基础[关闭]
【发布时间】:2012-12-08 03:44:30
【问题描述】:

我很困惑为什么浮点数会出现舍入错误。谁能给我看一个示例或两个?它们的最小值和最大值是多少?这是否意味着我在最小值/最大值之间得到每一个(不是每一个......如果不是多少?)数字和小数?

所以如果我想拥有一个一个国家的人口。即美国,我应该为此选择 ints 而不是 floats 还是它们没有效果。内存,效率,兼顾。如果不考虑,答案会是什么?人口计数将是整数。

这些问题非常初级,并且在网上有很长的详细信息,但我很难将它们拼凑在一起,因为它们变得非常复杂。

感谢您的宝贵时间。

PS:如果这个问题措辞不当,请通过评论告诉我。我将进行编辑,以便更清晰。

【问题讨论】:

  • 关于一个国家的人口,我从来没有见过一个人口包含分数的国家,如果一个国家有一千万公民,那会显得很奇怪。
  • @JoachimPileborg:基本上,它可以简单地容纳一个整数人口。一个人不必按小数仪式递增吗?
  • 不,因为那样在对值进行算术运算时会遇到麻烦。如果您不需要分数(例如对于人口),请使用无分数类型,例如整数。我还建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic
  • 有关浮点数的更多信息,请参阅此问题(和答案):stackoverflow.com/q/10049533/937822 讨论“舍入错误”。
  • 目前,你可以将任何一个国家的人口放入一个 32 位的有符号整数(中国大约是 13 亿),但世界人口不再适合 32-位无符号整数。请记住,float 使用 32 位存储浮点数的近似值;它不能存储比 32 位 int 更多的值。

标签: c floating-point int


【解决方案1】:

不,你不能不应该使用float。 float 和 int 都是 32 位存储类型,您在范围方面一无所获。

例如,如果将signed int 2147483647 的最大值尝试为浮点数,则会得到2.14748e+09

因此,如果是人口计数,您将丢失3647

最好使用 64 位 int 类型(在 C/C++ 中键入 long long)以用于更长的范围。

编辑

关于效率,最有效的类型始终是具有机器字长的int

浮点数要求机器额外使用数学处理单元。

所以如果是 32 位机器,int 32 位是最快和最高效的。

【讨论】:

  • 这应该说明您不应该不使用浮点数。他当然可以。 :-)
  • @lnafziger:如果我有一个像 3,423,343.0 + 1 这样的浮点数。那能保证 3,423,344.0 吗?
  • @bluejamesbond:当然不是,但是很多程序都是使用浮点数编写的,而且很少有十进制数可以保证是一个精确的数字。这并不意味着我们不能使用它们。这只是更多的工作。 :)
  • @bluejamesbond:我在上面发布了一个关于浮点数和舍入问题的问题(我之前回答过)的链接。也许这会帮助你理解!但是,对于您上面描述的内容,到目前为止,最好的存储类型将是整数类型之一..
  • @lnafziger Right.. 已编辑。
猜你喜欢
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2011-05-12
  • 2011-06-20
相关资源
最近更新 更多