Questions tagged «floating-point»

7
什么时候使用浮点数,什么时候使用双精度点
在我的编程经验中,我经常需要决定是否对实数使用float或double。有时我会选择浮动,有时我会选择双重,但这确实让我感觉更加主观。如果我要捍卫自己的决定,我可能不会给出合理的理由。 什么时候使用float和什么时候使用double?仅当存在内存限制时,您才总是使用double吗?或者,除非精度要求要求您使用double,否则您始终使用float?浮点数和双精度数之间关于基本算术的计算复杂度是否存在实质性差异?使用float或double的利弊是什么?你甚至用过长双吗?
194 c++  c  floating-point  numbers 

6
当大多数情况下建议使用双精度时,为什么浮点数仍是Java语言的一部分?
在我所见过的每个地方,它都说在几乎所有方面double都优于float。在Java中float已经过时了double,为什么仍要使用它呢? 我用Libgdx编写了很多程序,它们迫使您使用float(deltaTime等),但是在我看来double,就存储和内存而言,使用起来更容易。 我还读了什么时候使用float以及什么时候使用double,但是如果float真的只对小数点后有很多数字的数字有用,那为什么我们不能仅使用的多种变体之一double? 关于人们为什么仍然坚持使用浮点数,即使它实际上不再具有任何优势,是否有任何理由呢?改变这一切只是太多的工作吗?

5
为什么负零很重要?
我对为什么我们关心正零和负零的不同表示感到困惑。 我隐约记得阅读过的说法,即负零表示在涉及复数的编程中极为重要。我从来没有机会编写涉及复数的代码,所以我对为什么会这样感到困惑。 Wikipedia关于该概念的文章并不是特别有用。如果我理解正确的话,它只会使带符号的零的含糊的说法使某些数学运算在浮点中变得更简单。该答案列出了几个功能不同的函数,如果您熟悉它们的用法,则可以从示例中推断出一些东西。(尽管复杂的平方根的特定示例看起来完全错了,因为这两个数字在数学上是等价的,除非我有误解。)但我一直无法找到一个清晰的陈述,说明如果不存在该陈述会遇到的麻烦。我能够找到的更多数学资源表明,从数学角度看,两者之间没有区别,并且Wikipedia文章似乎暗示,除了描述限制之外,在计算之外很少见到这一点。 那么为什么负零在计算中有价值呢?我确定我只是想念一些东西。


3
是否存在不能以10为基数但可以以2为基数的数字?
C#的decimal类型用于需要以10为底的精确表示的数字。例如,0.1不能以2为底(例如float和double)表示,并且在存储在这些类型的变量中时始终为近似值。 我想知道相反的事实是否还可能。是否存在以10为基数不能表示但可以以2为基数表示的数字(在这种情况下,我想使用a float代替a decimal来处理它们)?


9
为什么在科学/工程中经常使用浮点数?
在研究浮点数的准确性时,我在一些地方看到了类似于 “ float和double是(设计 / 经常用于)工程和科学计算 “ 根据我的理解,浮点数和双精度数的强度是它们用于(良好但不是完美的)精度所使用的内存量。 我觉得我几乎从这个答案中得到了理解 “浮点数使您可以为连续数量建模” 我仍然不相信我的理解。工程学和科学听起来都像是您希望从计算中获得精确结果的领域,据我所知,浮点数不会给出。我也不确定我到底遵循什么“连续数量”。 有人可以进一步解释一下,也许举个例子吗?

8
即使我没有发生舍入错误,比较浮点数的相等性是否也会误导初级开发人员?
例如,我想显示一个从0,0.5,... 5开始的按钮列表,每0.5跳一次。我使用for循环来做到这一点,并在按钮STANDARD_LINE上使用了不同的颜色: var MAX=5.0; var DIFF=0.5 var STANDARD_LINE=1.5; for(var i=0;i<=MAX;i=i+DIFF){ button.text=i+''; if(i==STANDARD_LINE){ button.color='red'; } } 在这种情况下,应该没有舍入错误,因为每个值在IEEE 754中都是准确的。 var MAX=10; var STANDARD_LINE=3; for(var i=0;i<=MAX;i++){ button.text=i/2.0+''; if(i==STANDARD_LINE/2.0){ button.color='red'; } } 一方面,原始代码更加简单并转发给我。但是我正在考虑一件事:i == STANDARD_LINE是否误导了初级队友?它是否掩盖了浮点数可能具有舍入误差的事实?阅读这篇文章的评论后: https://stackoverflow.com/questions/33646148/is-hardcode-float-precise-if-it-can-be-represented-by-binary-format-in-ieee-754 似乎有很多开发人员不知道某些浮点数是准确的。即使在我的情况下有效,我是否应该避免浮点数相等性比较?还是我在考虑这个问题?

12
为什么需要浮点/双精度?
我正在看http://www.joelonsoftware.com/items/2011/06/27.html并嘲笑乔恩·斯凯特(Jon Skeet)的笑话,说的不是0.3,而是0.3。我个人从来没有浮点数/小数/双精度问题,但是后来我记得我很早就学习了6502,并且在我的大多数程序中都不需要浮点数。我唯一的使用时间是用于图形和数学,其中数字不正确,输出用于屏幕,而不是存储在(db,文件中)或依赖于屏幕。 我的问题是,您通常在哪里使用浮点数/小数/双精度数?所以我知道要提防这些陷阱。有了钱,我使用多头并以美分存储值,为了提高游戏中对象的速度,我添加了整数并除(或移位)了该值,以了解是否需要移动像素。(我在6502天内使对象移动,我们没有划分或浮动,但有移动)。 所以我主要是好奇。

5
从整数转换为单精度时可能会失去精度
当我进入该部分时,我正在阅读Microsoft的一篇有关扩大转换和严格选择的文章。 以下转换可能会失去精度: 整数到单 长到单或双 小数到单或双 但是,这些转换不会丢失信息或幅度。 ..但根据另一篇有关数据类型的文章, 整数类型可以存储-2.147.483.648至2.147.483.647和 单一类型可以存储 1,401298E-45到3,4028235E + 38(正数), 和-3,4028235E + 38到-1,401298E-45(对于负数) ..因此Single可以比Integer存储更多的数字。我不明白在什么情况下从Integer转换为Single可能会失去精度。有人可以解释一下吗?

2
谁能解释浮点数在内存中的表示?
当我阅读上一个问题时,这不是重复的问题。 谁能帮助我理解how float values are stored in the memory。 我的疑问是浮点值包含' .'(for example 3.45)'.'在内存中将如何表示? 有人可以用图表说明我吗?

5
浮点舍入误差的解决方案
在构建处理大量数学计算的应用程序时,我遇到了某些数字会导致舍入错误的问题。 虽然我知道浮点数不是精确的,但问题是我如何处理确切的数字,以确保在对它们进行计算时,浮点数舍入不会引起任何问题?

6
如何用近似相等实现浮点哈希
假设我们有以下Python类(Java中存在的问题与equals和相同hashCode) class Temperature: def __init__(self, degrees): self.degrees = degrees degrees开尔文的温度在哪里?现在,我想实现平等的测试和哈希为Temperature的方式, 比较浮点数到ε差,而不是直接相等测试, 并履行a == b隐含的合同hash(a) == hash(b)。 def __eq__(self, other): return abs(self.degrees - other.degrees) < EPSILON def __hash__(self): return # What goes here? Python文档讨论了一些关于确保数字哈希hash(2) == hash(2.0)的问题,但这并不是完全相同的问题。 我是否在正确的轨道上?如果是这样,在这种情况下实现散列的标准方法是什么? 更新:现在我知道这种浮点数相等性测试消除了==和的可传递性equals。但是,如何将其与浮动的“常识”一起使用,不应该直接进行比较?如果通过比较浮点数实现相等运算符,则静态分析工具会抱怨。他们这样做正确吗?

2
Lua如何处理整数和浮点数?
据我记得自己编程时,我曾被教过不要比较浮点数是否相等。现在,在阅读有关Lua 类型的Lua编程时number,我发现了以下内容: 数字类型表示实数(双精度浮点数)。Lua没有整数类型,因为它不需要它。人们对浮点算术错误普遍存在误解,有人担心即使是简单的增量也会对浮点数产生怪异。事实是,当您使用双精度数表示整数时,根本没有舍入错误(除非数字大于100,000,000,000,000)。具体来说,Lua数可以表示任何长整数而没有舍入问题。而且,大多数现代CPU进行浮点运算的速度与整数运算一样快(甚至更快)。 所有语言都正确吗?基本上,如果我们不超过双精度浮点数,那么使用整数算术安全吗?或者,为了更符合问题标题,Lua对它的number类型有什么特殊之处,以便它既可以用作整数类型又可以用作浮点类型吗?

1
浮点函数的隐含精度
在回顾另一位程序员对某个函数的实现以计算正态分布CDF的实现时,我建议用Python的内置函数替换整个实现,或者使用通用的科学库SciPy。 另一位程序员指出,他们的文档中也math.erfc()没有scipy.stats.norm.cdf()提供任何精度保证。因此,在替换近似算法(该算法取自颇受好评的源,并记录了错误范围)时,我应该格外谨慎。 老实说,怀疑内置或库函数的准确性和精确度的想法从来没有想到。毕竟,多年来我一直在不停地调用诸如sin()和之类的函数,sqrt()为什么math.erf()还是scipy.stats.norm.cdf()应该有所不同呢? 但是现在,我很担心。我的问题是: 通常,如果文档中没有特别提及,是否暗示这些功能在IEEE双精度浮点提供的精度范围内完全精确到最后一位小数? 尤其是对于Python math.erf()或SciPy而言,这是真的scipy.stats.norm.cdf()吗?你怎么知道? 此手册页sin()说…… 当它们的参数接近pi的倍数或远离0.0时,这些函数可能会失去准确性。 当正弦函数是周期性且对称的时,为什么要存在这样的警告?似乎给调用者增加了规范输入以获取最佳准确性的负担。 另一方面,Mozilla的文档中Math.sin()没有提及准确性或精度。这是否意味着它是完全准确的,还是Math.sin()仅在某些情况下才像其他地方一样在JavaScript中才是准确的“常识” ?

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.