Questions tagged «floating-point»

浮点数是实数的近似值,可以表示比整数大的范围,但使用相同的内存量,但代价是精度较低。如果您的问题是关于较小的算术错误(例如,为什么0.2 + 0.1等于0.300000001?)或十进制转换错误,请在发布前阅读下面链接的“信息”页面。

3
为什么使用英特尔C ++编译器的NaN-NaN == 0.0?
众所周知,NaN是以算术方式传播的,但是我找不到任何演示,因此我写了一个小测试: #include <limits> #include <cstdio> int main(int argc, char* argv[]) { float qNaN = std::numeric_limits<float>::quiet_NaN(); float neg = -qNaN; float sub1 = 6.0f - qNaN; float sub2 = qNaN - 6.0f; float sub3 = qNaN - qNaN; float add1 = 6.0f + qNaN; float add2 = qNaN + qNaN; float …
300 c++  c  floating-point  ieee-754  icc 


6
为什么更改总和顺序会返回不同的结果?
为什么更改总和顺序会返回不同的结果? 23.53 + 5.88 + 17.64 = 47.05 23.53 + 17.64 + 5.88 = 47.050000000000004 双方的Java和JavaScript的返回相同的结果。 我知道,由于以二进制表示浮点数的方式,某些有理数(例如1/3-0.333333 ...)无法精确表示。 为什么简单地更改元素的顺序会影响结果?

19
为什么十进制数字不能完全用二进制表示?
关于浮点表示,已经向SO发布了几个问题。例如,十进制数0.1没有精确的二进制表示形式,因此使用==运算符将其与另一个浮点数进行比较是危险的。我了解浮点表示法的原理。 我不明白的是,从数学的角度来看,为什么小数点右边的数字比左边的数字更“特殊”? 例如,数字61.0具有精确的二进制表示形式,因为任何数字的整数部分始终是精确的。但是数字6.10并不准确。我所要做的就是将小数点后一位移到突然之间,我从埃克塞索比亚(Exactopia)来到了Inexactville。从数学上讲,两个数字之间应该没有本质上的区别,它们只是数字。 相比之下,如果我将小数点向另一方向移动一位以产生数字610,则我仍然处于Exactopia。我可以继续朝这个方向前进(6100、610000000、610000000000000),它们仍然是精确,精确,精确的。但是,只要小数点超过某个阈值,数字就不再精确。 这是怎么回事? 编辑:为澄清起见,我想避免讨论诸如IEEE之类的行业标准表示,而坚持我认为是数学上“纯净”的方式。在以10为底的位置值是: ... 1000 100 10 1 1/10 1/100 ... 以二进制形式,它们将是: ... 8 4 2 1 1/2 1/4 1/8 ... 这些数字也没有任意限制。位置无限地增加到左侧和右侧。

2
为什么有些float <整数比较的速度慢四倍?
将浮点数与整数进行比较时,某些值对的评估时间要比其他类似幅度的值花费更长的时间。 例如: &gt;&gt;&gt; import timeit &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953421000") # run 1 million times 0.5387085462592742 但是,如果将float或整数变小或变大一定数量,则比较会更快地运行: &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953422000") # integer increased by 1000 0.1481498428446173 &gt;&gt;&gt; timeit.timeit("562949953423001.8 &lt; 562949953421000") # float increased by 3001.1 0.1459577925548956 更改比较运算符(例如使用==或&gt;代替)不会以任何明显的方式影响时间。 这不只是涉及到大小,因为采摘较大或较小的值会导致比较快,所以我怀疑它已经降到了一些不幸的方式位排队。 显然,对于大多数用例而言,比较这些值已足够快。我只是对为什么Python似乎在某些价值观上比在其他价值观上挣扎更多感到好奇。

3
ActiveRecord中的浮点数与小数
有时,Activerecord数据类型使我感到困惑。经常犯错。对于给定的情况,我永恒的问题之一是 我应该使用:decimal还是:float? 我经常遇到这个链接,ActiveRecord::decimal vs:float?,但答案还不够清楚,无法确定: 我见过很多线程,人们建议平整地使用永不使用float并始终使用十进制。我也看到一些人建议仅将浮点数用于科学应用。 这是一些示例情况: 地理位置/纬度/经度:-45.756688,120.5777777,... 比/百分比:0.9,1.25,1.333,1.4143,... 我过去使用:decimal过,但是与BigDecimal浮点数相比,我发现在Ruby中处理对象不必要地麻烦。我也知道:integer,例如,我可以用来表示金钱/美分,但是它并不完全适合其他情况,例如当精度可能随时间变化的数量时。 使用它们的优点/缺点是什么? 知道使用哪种类型的最佳经验法则是什么?



12
对于IEEE754 NaN值,所有比较返回false的理由是什么?
为什么NaN值的比较与所有其他值都不同?也就是说,与一个或两个值均为NaN的运算符==,&lt;=,&gt; =,&lt;,&gt;进行的所有比较均返回false,这与所有其他值的行为相反。 我想这以某种方式简化了数值计算,但是我找不到明确陈述的理由,甚至在Kahan撰写的关于IEEE 754状态的讲义中也没有详细讨论其他设计决策。 在进行简单的数据处理时,这种异常行为会引起麻烦。例如,当在C程序中对带有某些实值字段的记录列表进行排序时,我需要编写额外的代码以将NaN作为最大元素来处理,否则排序算法可能会变得混乱。 编辑: 到目前为止,所有答案都表明,比较NaN毫无意义。 我同意,但这并不意味着正确答案是错误的,而是一个非布尔值(NaB),幸运的是不存在。 因此,在我看来,选择比较返回真还是假是任意的,并且对于一般数据处理,如果遵循通常的规律(反射性为==,三分法为&lt;,==,&gt;),则最好避免数据结构,这将是有利的依靠这些法律变得混乱。 因此,我要求打破这些法律的某些具体优势,而不仅仅是哲学推理。 编辑2: 我想我现在明白为什么将NaN设为最大值会是个坏主意,它将使上限计算变得混乱。 NaN!= NaN可能需要避免检测诸如 while (x != oldX) { oldX = x; x = better_approximation(x); } 但是最好通过比较绝对差和较小的限制来写出。因此恕我直言,这对于打破NaN的反射率是一个相对较弱的论点。

12
什么时候应该使用双精度代替十进制?
我可以列举使用double(或float)代替的三个优点decimal: 使用更少的内存。 更快,因为处理器原生支持浮点数学运算。 可以代表更大范围的数字。 但是这些优点似乎仅适用于计算密集型操作,例如建模软件中的操作。当然,当需要精确度(例如财务计算)时,不应使用双精度。那么,有没有任何实际的理由选择double(或float)而不是decimal“常规”应用程序? 编辑添加:感谢所有出色的答复,我从中了解到。 还有一个问题:少数人指出,加倍数可以更精确地表示实数。当声明时,我认为它们通常也可以更准确地表示它们。但是,在执行浮点运算时精度是否会降低(有时会显着降低),这是不正确的说法?


9
纬度/经度(小数点后8位)应使用哪种MySQL数据类型?
我正在处理地图数据,并且Latitude/Longitude扩展到了8个小数位。例如: Latitude 40.71727401 Longitude -74.00898606 我在Google文档中看到了 使用: lat FLOAT( 10, 6 ) NOT NULL, lng FLOAT( 10, 6 ) NOT NULL 但是,它们的小数位仅移至6。 我应该使用FLOAT(10, 8)还是应该考虑使用另一种方法来存储此数据,以便精确。它将与地图计算一起使用。谢谢!




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.