Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Floating point 如何处理浮点舍入问题?_Floating Point - Fatal编程技术网

Floating point 如何处理浮点舍入问题?

Floating point 如何处理浮点舍入问题?,floating-point,Floating Point,看到了,我很好奇什么 还有其他类型的解决方案可以处理此类浮点舍入错误。那么,您从中了解最多的浮点错误是什么?您从中了解到了什么 编辑:我在一个项目中工作,在这个项目中,我们必须处理大量浮点计算,所以我希望得到一些答案,可能有助于我在一些事情成为问题之前避免它们。我会接受这个答案,它给了我除了“用ε来比较一切”之外最新的见解。我认为你真的不必担心它,除非你处理的是非常小的数字和/或非常大的数字。。。如果这是一个问题,要么使用某种“decimal”类,要么选择一种更稳定的算法 我不认为这在过去真的伤

看到了,我很好奇什么 还有其他类型的解决方案可以处理此类浮点舍入错误。那么,您从中了解最多的浮点错误是什么?您从中了解到了什么


编辑:我在一个项目中工作,在这个项目中,我们必须处理大量浮点计算,所以我希望得到一些答案,可能有助于我在一些事情成为问题之前避免它们。我会接受这个答案,它给了我除了“用ε来比较一切”之外最新的见解。

我认为你真的不必担心它,除非你处理的是非常小的数字和/或非常大的数字。。。如果这是一个问题,要么使用某种“decimal”类,要么选择一种更稳定的算法


我不认为这在过去真的伤害过我,但当这件事发生在我的一个同龄人身上时,我非常激动,我清楚地知道错在哪里:D

我学会了永远不要比较两个浮点数是否相等。相反,我总是尝试表达我的逻辑,这样比较总是小于或大于条件。将浮点与零进行比较尤其令人讨厌

尽量避免增加不同震级的数量。例如,在单精度算术中,
10^8+1==10^8
。您可以通过移动到双精度来解决此问题,但随后
10^8+1.00000001==10^8+1
…分数丢失

如果进入某个线性代数的所有数字都有偏差,请先消除偏差。因此,给定
10000001,1000003.9,1000002.5,…
,在做任何事情之前减去一百万,然后在末尾加回去

要对非常大的小数字序列求和,请先对较小的子序列求和,这样结尾的数字就不会过度四舍五入


要将非常大的数字序列相乘,请将它们的对数相加,以避免溢出或下溢。

另一个问题是数量级完全不同的数字。一个小数字(我们称之为dx)加上一个大得多的数字(我们称之为x)可能会完全下溢。因此,在某些情况下,x=x+dx可以运行一百万次,而x保持不变。-1:在许多情况下,你需要注意浮点运算的精度有限-采取草率的方法,例如“我认为你真的不必担心它,除非你处理的是非常小的数字和/或非常大的数字”只是自找麻烦。@wisty:这就是我所说的“小数字和大数字”@保罗:嗯。。。那么,什么,每次你使用浮点数时,你应该仔细检查每一次计算?我的意思是,如果你在它上面运行一些复杂的算法,精度很重要,那么当然,考虑一下,但在大多数情况下,当它成为一个问题时,你可以修复它。除非是任务关键型软件。是的,但请注意,小数字和大数字的乘法和除法通常是可以的(除非你达到零或无穷大),但加法和减法几乎总是危险的。不是一个有特定答案的特定问题-需要是CW吗?