问题标签 [floating-point]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Extracting mantissa and exponent from double in c#
Is there any straightforward way to get the mantissa and exponent from a double in c# (or .NET in general)?
I found this example using Google, but I'm not sure how robust it would be. Could the binary representation for a double change in some future version of the framework, etc?
The other alternative I found was to use System.Decimal instead of double and use the Decimal.GetBits() method to extract them.
Any suggestions?
algorithm - 如何最好地总结大量浮点数?
想象一下,您有大量各种大小的浮点数。计算总和的最正确方法是什么,并且误差最小?例如,当数组看起来像这样时:
然后你用一个简单的循环从左到右加起来,比如
每当您将较小的数字相加时,可能会低于精度阈值,因此误差会越来越大。据我所知,最好的方法是对数组进行排序并开始从最低到最高的数字相加,但我想知道是否有更好的方法(更快,更精确)?
编辑:感谢您的回答,我现在有一个工作代码可以完美地总结 Java 中的双精度值。它是来自获胜答案的 Python 帖子的直接端口。该解决方案通过了我所有的单元测试。(这里有一个更长但经过优化的版本Summarizer.java)
language-agnostic - 如何显示浮点数或双精度数的二进制表示?
我想显示浮点数的二进制(或十六进制)表示。我知道如何手动转换(使用这里的方法),但我有兴趣查看执行相同操作的代码示例。
虽然我对 C++ 和 Java 解决方案特别感兴趣,但我想知道是否有任何语言使它特别容易,所以我让这种语言不可知。我很想看到其他语言的一些解决方案。
编辑:我已经很好地覆盖了 C、C++、C# 和 Java。是否有任何替代语言专家想要添加到列表中?
c++ - 为什么 c/c++ 浮点类型的命名如此奇怪?
C++ 提供了三种浮点类型:float、double 和 long double。我很少在我的代码中使用浮点数,但是当我这样做时,我总是被无害的行上的警告所吸引,比如
问题是文字 4.0 是双精度数,而不是浮点数——这很烦人。
对于整数类型,我们有 short int、int 和 long int,这非常简单。为什么 C 没有短浮点数、浮点数和长浮点数?“双”到底是从哪里来的?
编辑:浮动类型之间的关系似乎类似于整数。double 必须至少与 float 一样大,long double 至少与 double 一样大。没有其他精度/范围保证。
c# - 何时使用浮点数
几年前,我学到了关于浮点数精度问题的艰难方法,所以我放弃了使用它们。但是,我仍然会遇到使用浮点数的代码,这让我感到畏缩,因为我知道有些计算会不准确。
那么,什么时候适合使用浮点数呢?
编辑: 作为信息,我不认为我遇到过一个数字的准确性并不重要的程序。但我有兴趣听听例子。
c++ - 如何在 C++ 中检查无限和不确定的值?
在我的程序中,当一个值被零除时,通常会出现无穷大。当我将零除以零时,我变得不确定。如何在 C++ 中检查无限和不确定的值?
在 C++ 中,无穷大由 1.#INF 表示。不确定由 -1.#IND 表示。问题是如何测试一个变量是无限的还是不确定的。检查无穷大相对简单:您可以在特定的 C++ 中找到无穷大定义。对于我的情况(VS2003),它是 std::numeric_limits::infinity()。您必须包含“限制”才能使用它。您可以将此无限值分配给变量,然后将其与某个值进行比较,以检查该值是否为无限。
Indeterminate 有点棘手,因为您无法将不确定的值与其他值进行比较。任何比较都返回 false。您可以使用此属性通过将其与自身进行比较来检测不确定的值。假设您有一个名为 aVal 的双变量。在正常情况下,aVal != aVal 返回 false。但如果值不确定,aIndVal != aIndVal 返回真。无限值不存在这种奇怪的情况,即 aInfVal != aInfVal 总是返回 false。
以下是两个可用于检查不确定值和无限值的函数:
这些检查有没有更好的方法,我错过了什么吗?
c++ - 如何加快浮点数到整数的转换?
我们在我们的项目中进行了大量的浮点到整数的转换。基本上,像这样
执行转换的默认 C 函数结果非常耗时。
是否有任何解决方法(可能是手动调整功能)可以稍微加快这个过程?我们不太关心精度。
linux - 在 Linux 设备驱动程序中使用浮点的编码约定是什么?
这与 这个问题有关。
我不是 Linux 设备驱动程序或内核模块方面的专家,但我一直在阅读 Rubini & Corbet 的“Linux 设备驱动程序”[O'Reilly] 和一些在线资源,但我一直无法找到关于这个具体问题的任何事情。
何时允许内核或驱动程序模块使用浮点寄存器?
如果是这样,谁负责保存和恢复其内容?
(假设 x86-64 架构)
如果我理解正确,每当 KM 运行时,它都在使用已从某个应用程序线程抢占的硬件上下文(或硬件线程或寄存器集——无论您想调用什么)。如果您在 c 中编写 KM,编译器将正确确保通用寄存器正确保存和恢复(就像在应用程序中一样),但浮点寄存器不会自动发生这种情况。就此而言,许多 KM 甚至不能假设处理器具有任何浮点能力。
我猜想使用浮点的KM必须小心保存和恢复浮点状态是否正确?是否有这样做的标准内核函数?
是否在任何地方都说明了此编码约定?
对于非 SMP 驱动程序,它们是否不同?
对于较旧的非抢占式内核和较新的抢占式内核,它们是否不同?
java - 几乎等于 2s 补码或 BigDecimal 缩放
比较两个浮点值的更好方法是什么 - 使用 Epsilon 或带有缩放的 Big Decimal 比较?
例如,您的数据范围是 0.00 - 49,999.99?