为什么浮点数对于精确任务而言长期偏好?

use*_*165 1 floating-point precision int floating-accuracy long-integer

为什么浮动首选精度?难道不是很大的整数来表示浮动给出的精度并且在所有机器上都是确定性的吗?例如,以浮点移动0.48124米的物体可以由以int或long移动48124微米的物体代表.

Eri*_*hil 6

对于某些计算,浮点优先于整数,因为:

  • 当您以定点格式相乘时,产品具有新的比例,因此必须对其进行调整,或者必须编写代码以考虑更改的比例.例如,如果采用按100缩放的格式,则.3用30表示,.4用40表示,然后将30乘以40得到1200,但在相同比例下的正确答案应为12(表示.12) ).部门需要类似的调整.
  • 当整数格式溢出时,许多机器和编程语言都没有很好的支持来获得结果中最重要的部分.浮点自动生成结果的最重要部分并舍弃丢弃的位.
  • 整数运算通常会截断分数,但浮点数会对它们进行舍入(除非另有要求).
  • 一些计算涉及大量数字,包括非常大和非常小的数字.定点格式的范围很小,但浮点格式的范围很大.您可以使用定点格式手动跟踪比例,但是您只是使用整数实现自己的浮点.
  • 许多机器和/或编程语言忽略整数溢出,但浮点可以优雅地处理它们和/或在它们发生时提供通知.
  • 浮点算法定义明确,通常实现良好; 其中的错误已经减少(有时是痛苦的经历).构建新的自己动手算法很容易出错.
  • 对于某些功能,很难提前预测结果的比例,因此使用定点格式很不方便.例如,考虑正弦.每当输入接近π的倍数时,正弦接近零.因为π是无理的(和超越的),其整数或定点数接近π的倍数的模式是非常不规则的.一些定点数不接近π的倍数,它们的正弦值约为.1,.5,.9等.一些定点数非常接近π的倍数,并且它们的正弦值接近于零.一些非常接近π的倍数,并且它们的正弦很小.因此,没有合理精度的定点格式,总是可以返回正弦结果,而不会出现下溢或溢出.

你问浮点数与long.在某些情况下,64位整数可能优于32位浮点格式,但通常适当的比较是针对可比较的大小,例如32位整数到32位浮点和64位整数到64位浮点.在这些情况下,问题是动态规模的好处是否超过了几位精度的损失.