问题标签 [multiprecision]

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 投票
1 回答
2171 浏览

matlab - 当模型不预测一个类时,多类分类中的未定义 F1 分数

我正在尝试在多类分类中使用 F1 分数进行模型选择。

我正在按类别计算它们并对其进行平均:(F1(class1)+F1(class1)+F1(class1))/3 = F1(total)

但是,在某些情况下,我会得到 F1 分数的 NaN 值。这是一个示例:设 true_label = [1 1 1 2 2 2 3 3 3] 和 pred_label = [2 2 2 2 2 2 3 3 3]。

那么混淆矩阵看起来像: C =[0 3 0; 0 3 0; 0 0 3]

这意味着当我计算第一类的精度(计算 F1 分数)时,我得到:0/(0+0+0),这是未定义的或 NaN。

首先,我在这里计算 F1 分数或精度是否有误?其次,在模型选择中我应该如何对待这些情况?忽略它们,或者我应该将此类的 F1 分数设置为 0(减少此模型的总 F1 分数)。

任何帮助将不胜感激!

0 投票
2 回答
106 浏览

c++ - 在堆中定义不同大小的struct

我正在尝试实现一个 bigInt 库。我一直在检查GMPttmahtlibtommath等其他库,但它们中的任何一个都满足项目的要求(因为许可证,因为它们只使用堆栈等)

我将遵循 libtommath 的方法(确实有据可查,并且全部用 C 编写),但我希望所有内容都存储在堆中。libtommath 在这样的结构中实现了 bigInt:

如您所见,它具有访问值的间接方式。(mp_digit 是大整数的位数)。我想摆脱间接,所以在堆中有某种类似的结构,其中最后一个元素是 mp_digit[],其中每个 mp_int 实例的大小可能不同。

我可以使用 void* 和 malloc() 来做到这一点,知道第一个 X 位置是带有信息的 int(使用、分配、符号等),然后知道偏移量后访问 mp_digit[],但我不喜欢这个想法。我想知道哪种方法更好。

我发现了其他类似的问题,例如这个这个,但它们并没有全部存储在堆中,所以我的有点棘手/不同。

谢谢,

0 投票
1 回答
409 浏览

c++ - 如何将 C++ max 函数与 boost 128 位整数一起使用

如果我有以下代码:

如果我在 Ubuntu 上使用 g++ 进行编译,我会收到以下错误:

错误:无法在赋值中将 'const boost::multiprecision::number >' 转换为 'int64 {aka long long int}'

比较两个 int128_t 数字以查看哪个更大的正确方法是什么?

编辑:我正在使用 std::max。

0 投票
2 回答
702 浏览

c++ - 如何从 boost int256_t 中取以 2 为底的对数?

所以我想从 int256_t 中取对数。

我发现了这一点,但将其修改为 sizeof int256_t 不起作用。它会给出不正确的结果: https ://stackoverflow.com/a/11376759

boost中是否有支持多精度的日志功能?

0 投票
1 回答
253 浏览

c++ - 多精度提升间隔

我尝试将 boost 区间算术库与 boost 多精度库一起使用。如果我将标准双精度与本机双精度数据类型一起使用,则一切正常。

然而,使用多精度库,它产生的结果实际上更不准确。这里有一些代码:

可以看出,该double版本产生了非常准确的结果。该BigFloat版本应该更加准确,但是它产生了一个非常大的界限——实际上是sin函数的最大值,所以这个界限完全没有用。

我该如何解决这个问题,以便区间库实际上利用更高的精度并产生更清晰的界限?

0 投票
2 回答
393 浏览

c - 计算 64 位乘 128 位乘积的低 128 位需要多少次 64 位乘法?

考虑到您要计算 64 位和 128 位无符号数相乘结果的低 128 位,并且您可用的最大乘法是类似 C 的 64 位乘法,它需要两个 64 位无符号输入并返回结果的低 64 位。

需要多少次乘法?

当然,您可以使用 8 次:将所有输入分解为 32 位块并使用 64 位乘法来执行 4 * 2 = 8 所需的全宽 32*32->64 乘法,但可以做得更好?

当然,该算法应该只在乘法之上执行“合理”数量的加法或其他基本算术(我对将乘法重新发明为加法循环并因此声称“零”乘法的解决方案不感兴趣)。

0 投票
1 回答
79 浏览

julia - 在 Julia:BigFloat RoundFromZero 看起来很奇怪

在 Julia 1.0.0 REPL 中,我得到以下行为。第一行是文档 https://docs.julialang.org/en/v1/base/math/#Base.Rounding.RoundFromZero中的一个示例

上面例子中 5 的含义我不清楚。例如,

看起来,被四舍五入的两个数字应该四舍五入到 REPL 中的不同输出。我错过了什么?

0 投票
1 回答
628 浏览

c++ - 两个字符串之间的数学运算

我正在尝试用大小数 C++ 添加减法和乘法。

例子:

4125487821547.87879845215584844588 - 354556689.899455132265468

到目前为止,我认为我需要将输入保存为字符串,但不知道之后如何进行。

提前感谢帮助谢谢

0 投票
1 回答
112 浏览

r - 我收到 boost 和 Rcpp 的致命错误

如帖子中所述:

Rcpp 和 boost:它应该可以工作,但不能

我正在尝试在 Windows 的 Rcpp 中使用 boost。(简化的)文件是:

我有一个编译问题。正如@duckmayr 在那篇文章中建议的那样,我尝试了:

Sys.setenv("PKG_LIBS" = "-lquadmath")

接着Rcpp::sourceCpp('quadexp.cpp')

这样,编译运行不会出错。但是,当我执行 qexp() 时,我在 RStudio 中收到一条关于“致命错误”的消息,并且 RStudio 完全关闭。你知道会发生什么吗?我认为我的问题是由于我的某种配置造成的,因为@duckmayr 可以毫无问题地运行相同的代码。为了避免这种令人讨厌的“致命错误”,我的配置应该查看哪些部分?

0 投票
2 回答
147 浏览

c++ - 添加存储在向量中的大整数的函数的问题

所以我决定编写自己的多精度数据类型。我编写了一个简单的函数,可以添加存储在vector<uint_fast8_t>.

问题 此函数仅适用于 0 到 10000000 ( 10000000is vector<uint_fast8_t>{1,0,0,0,0,0,0,0}) 之间的数字。对于更大的数字,结果是疯狂的。例如它吐出来10000000000 + 123 + = 1012300000123。为什么会这样? 编辑 1我被问到这个部门x.size() / sizeof(uint_fast8_t)。据我所知,它以字节为单位返回对象的大小。我将它除以 uint_fast8_t 的大小以获得向量中的元素数。它似乎运作良好。也许我误解了什么。