问题标签 [mantissa]

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.

0 投票
5 回答
512 浏览

floating-point - 使用 C:如何确定浮点组件的大小?

我正在寻找有关如何以独立于架构的方式查找浮点数的大小(以位为单位)和范围的建议。代码可以使用不同的标志在各种平台(AIX、Linux、HPUX、VMS,也许是 Windoze)上构建 - 所以结果应该会有所不同。符号,我只看到了一点,但是如何测量指数和尾数的大小?

0 投票
3 回答
5141 浏览

numerical-analysis - 如何在特定机器上找到尾数长度?

我想在特定计算机上找到尾数位数和单位舍入。我了解这些是什么,只是不知道如何找到它们-尽管我知道它们可能因计算机而异。

我需要这个数字来执行数值分析的某些方面,比如分析错误。

我目前在想的是,我可以编写一个小的 c++ 程序来缓慢递增一个数字,直到发生溢出,但我不确定要使用什么类型的数字。

我在正确的轨道上吗?究竟如何计算这个?

0 投票
3 回答
1858 浏览

python - ldexp 和 frexp 在 python 中是如何工作的?

python frexp 和 ldexp 函数将浮点数拆分为尾数和指数。有谁知道这个过程是否暴露了实际的浮点结构,或者它是否需要 python 进行昂贵的对数调用?

0 投票
1 回答
1922 浏览

objective-c - Cocoa:尾数和指数为 0 的 NSDecimalNumber

在数学上,任何指数为 0 的数字都应该等于 1(我的补救数学研究向我保证)。

但是这段代码产生了 5:

这是计算机编程中的标准吗——可以依赖于在未来的 Cocoa 版本中没有被“纠正”吗?

0 投票
2 回答
1219 浏览

floating-point - 浮点尾数偏差

有谁知道如何出去解决这个问题?

使用浮点数(表示使用 14 位格式,5 位用于偏置为 16 的指数,8 位归一化尾数,数字为单符号位),执行以下两个计算,支付密切注意操作顺序。

0 投票
1 回答
1635 浏览

linux - GCC 在不同的优化级别以不同的方式处理浮点比较

我有一些简单的代码比较两个浮点值来说明我在 GCC 的优化中看到的问题,并希望有人可以帮助我弄清楚为什么它产生的输出在某些可重复的情况下是不同的。

首先,我知道将浮点值与 == 进行比较是不好的,因为您可以在尾数中偏离非常小的数量,但在我的示例中并非如此。我遇到的问题是基于 2 个因素的输出变化。1)我传入的优化标志,以及 2)如果我取消注释 std::cout 行。

为什么 GCC 生成的代码在 -O2 下运行不同?如果我取消注释打印,为什么在 -O2 下编译的代码可以工作?

这是我正在测试的代码:

当使用 -O0、-O1 和 -O3 ( g++ -O test.cpp ) 在 linux/cygwin 上编译时,我得到以下输出:


$ ./a.exe
old_val!=new_val
0,40c3126f
diff_val = -6.096
old_val==new_val
40c3126f,40c3126f
diff_val = 0


该输出是正确的,您可以看到浮点数(new_val 和 old_val)的位是相同的。当我使用 -O2 标志( g++ -O2 test.cpp )编译时,我得到以下信息:


$ ./a.exe
old_val!=new_val
0,40c3126f
diff_val = -6.096
old_val!=new_val
40c3126f,40c3126f
diff_val = 1.19209e-07


我会认为这个输出是错误的。即使这两个值按位相同,减去它们和 == 检查表明它们是不同的。如果我然后取消注释 std::cout 行,并使用 -O2 标志( g++ -O2 test.cpp )重建,我会得到以下信息:


$ ./a.exe
使这项工作的随机 COUT
old_val!=new_val
0,40c3126f
diff_val = -6.096
使这项工作的随机 COUT
old_val==new_val
40c3126f,40c3126f
diff_val = 1.19209e-07


这在 old_val == new_val 中是正确的,即使减法仍然显示出细微的差异。

如果英尺为 2000,而不是 20000,则此代码也适用于 -O2。

谁能解释为什么编译的代码会这样?我想知道为什么不能将 2 位相同的浮点值与 == 进行比较。

gcc 版本 3.4.4

0 投票
2 回答
1934 浏览

vb.net - vb.net尾数和指数计算双精度

任何人都可以就如何从 VB.net 中的双精度数中获取尾数和指数提供任何建议吗?我知道我可以进行字符串解析和一些到整数的转换,但我想知道是否有人有一个数学等效公式可以让我这样做?

非常感谢

0 投票
1 回答
2511 浏览

java - 获取 Java BigDecimal 的尾数

我想用一些非常小和非常大的数字做一些简单的数学运算。我想我会从 BigDecimal 开始:

那么我如何获得尾数?要么 要么545.4很好。

0 投票
5 回答
7127 浏览

objective-c - NSDecimalNumber 的小数部分

我正在使用 NSDecimalNumber 来存储货币值。我正在尝试编写一个名为“cents”的方法,如果数字<10,它将数字的小数部分作为一个带有前导0的NSString返回。所以基本上

而且我正在尝试制作一种方法,该方法将返回 01、02 等...最多 99 作为字符串。我似乎无法弄清楚如何以这种格式将尾数作为字符串返回。我觉得我错过了一种方便的方法,但我再次查看了文档,并没有看到任何突然出现在我身上的东西。

0 投票
2 回答
3691 浏览

c# - 将尾数和指数转换为双精度

在一个非常高性能的应用程序中,我们发现 CPU 计算长算法的速度明显快于双精度数。但是,在我们的系统中,我们确定我们永远不需要超过 9 位小数的精度。所以我们使用 longs 来理解所有精度为 9 点的浮点运算。

然而,在系统的某些部分,由于使用双打的可读性,它更方便。因此,我们必须将假定小数点后 9 位的 long 值转换为 double。

我们发现简单地取长并除以 10 的 9 次方或乘以 1 除以 10 的 9 次方给出了双精度的不精确表示。

为了解决这个问题,我们使用Math.Round(value,9)来给出精确的值。

但是,Math.Round()性能非常缓慢。

所以我们目前的想法是直接将尾数和指数转换为双精度的二进制格式,因为这样,舍入将为零。

我们已经在网上学习了如何检查双精度位以获取尾数和指数,但是弄清楚如何反转它以获取尾数和指数并通过使用位来制造双精度是令人困惑的。

有什么建议么?