为什么浮动首选精度?难道不是很大的整数来表示浮动给出的精度并且在所有机器上都是确定性的吗?例如,一个以浮点移动0.48124米的物体可以用一个移动48124微米的物体代表int或long。
答案 0 :(得分:6)
对于某些计算,浮点优先于整数,因为:
您询问浮点数与long
。在某些情况下,64位整数可能优于32位浮点格式,但通常适当的比较是针对可比较的大小,例如32位整数到32位浮点和64位整数到64位浮点。在这些情况下,问题是动态规模的好处是否超过了几位精度的损失。
答案 1 :(得分:0)
它是481.24毫米,这是问题出现的一部分。使用整数(或长整数),你很可能遇到一种你会遇到某种四舍五入的情况。也许你的程序保证你所关心的最小单位是毫米,但它仍然导致一些丑陋的写作单位标准。不难发现100000毫米= 100米,但它不会立即显现出100000的方式,并且在一个你可能处理大多数米或公里的应用中,但你仍然需要精确度,还有更多比3463.823更难读。
此外,在很多情况下,你做关心尺寸超出了不方便的小,而浮动你可以修剪你显示的数字,数据仍然存在,所以3.141592653(等等,无论浮点精度是多少)修剪到3.14米比3141592653纳米更容易处理
答案 2 :(得分:0)
确定性行为的程度是数据表示的独立。它只需要更长的规范来精确定义浮点数学而不是整数数学,并且实现起来更加混乱。
IEEE浮点努力使所有机器上的浮点确定性。
整数可以是1或2的恭维和各种宽度,因此对于某些计算而言不是确定性的。所以整数数学本身就会有麻烦。
是的,大整数可以,并且已被用作OP建议。但正如@Eric Postpischil指出的那样,F-P的好处很多。大整数用于包括密码学在内的特定情况。
关注即将出现的十进制浮点标准,以解决银行业等问题。
答案 3 :(得分:0)
虽然许多类型的代码可以比浮点更有效地使用某种固定值,但是不同类型的代码和不同的情况有不同的要求。有些情况需要存储从零到一百万的数字到千分之一的数字;其他人要求存储从零到精确到十亿分之一的数字。对于某些目的来说,几乎不适合的定点格式对其他人来说将是非常过度的。如果一种语言可以有效地支持使用以各种不同格式存储的数字,那么定点数学可以具有一些非常巨大的优势。另一方面,语言通常更容易支持一到三种浮点格式,而不是支持许多其他必要的定点格式。此外,除非语言使单个例程能够使用各种定点格式,否则使用通用数学例程往往很困难。也许编译器技术发展到足以使用各种定点类型可能是实用的,但硬件浮点技术已经发展到足以在很大程度上消除对这种事物的需求。
答案 4 :(得分:0)
实际上,在某些应用中,由于多种原因,整数是优选的。特别是,与浮点不同,整数是平移不变的:
x1 - x2 == (x1 - displacement) - (x2 - displacement)
这在某些几何引擎中非常重要。例如,如果计算由某个参数确定的相同形状的大网格,则计算相同参数的集合,并为每个集合计算其代表之一中发生的情况,并将结果复制到具有相同参数的其他形状。翻译不变性确保这种优化是忠实的。
另一方面,浮点不是翻译不变的:
0.0002 - 0.0001 != (0.0002 - 1000000) - (0.0002 - 1000000) // this example in single precision
这有时会导致难以调试的非常令人讨厌的意外。