问题标签 [numerical]

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 投票
3 回答
1881 浏览

generics - Scala:在泛型类中进行数值运算的最佳方法是什么?

在 Scala 中,我希望能够编写使用 >、/、* 等运算符的通用类,但我不知道如何约束 T 以使其起作用。

我研究了用 Ordered[T] 约束 T,但这似乎不起作用,因为只有 RichXXX(例如 RichInt)扩展它,而不是 Int 等。我还看到了 Numeric[T],这是否仅在 Scala 2.8 中可用?

这是一个具体的例子:

这个类不会编译,因为有很多不支持 > 等的 T。

想法?

现在我已经使用了 MixIn 特征来解决这个问题:

如果我们改变原始类,可以在实例化时混合。

PS Mitch,受您重写 getMax 的启发,这里是另一个:

0 投票
2 回答
1903 浏览

algorithm - 组合问题和数值问题有什么区别

请您至少举两个例子。谢谢。

0 投票
2 回答
562 浏览

c - 使用 NAG 数学库重新分发应用程序 - 客户端必须有许可证?

有没有人处理过重新分发使用数值算法组 (NAG) 库的应用程序?

似乎当我构建一个可执行文件时,除非我为许可证文件设置了环境变量,否则它不会运行——即,如果我给某人提供了他们也需要许可证和相关守护程序的代码。

没有办法解决吗?我希望我只需要与它链接的许可证。

0 投票
1 回答
1534 浏览

.net - 用于 F# 的简单包装器,用于执行矩阵运算

这是一篇比较长的帖子。F# 现在有一个矩阵向量类型(在 PowerPack 中而不是在核心中)。这很棒!甚至 Python 的数值计算能力也是来自于第三部分。

但是那里提供的功能仅限于矩阵和向量算术,因此要进行反转,分解等,我们仍然需要使用另一个库。我现在正在使用最新的dnAnalytics,它正在合并到 Math.Net 项目中。但是 Math.Net 项目已经一年多没有向公众更新了,我不知道他们是否有继续的计划。

我做了以下包装器,这个包装器使用类似 Matlab 的函数来做简单的线性代数。由于我是 F# 和 FP 的新手,请您提供一些建议来改进包装器和代码?谢谢!

和测试代码

我也和matlab比较过

时序(双核 2.0GH,2GB 内存,Matlab 2009a)

matlab 大约快两倍。这是合理的,因为原生R也有类似的结果

0 投票
5 回答
586 浏览

c - 使用 IEEE 浮点进行优化 - 保证数学恒等式?

我在 IEEE 浮点规则方面遇到了一些问题,这些规则阻止了看起来很明显的编译器优化。例如,

不能优化为只返回 1,因为 NaN == NaN 为假。好吧,好吧,我猜。

但是,我想编写这样的代码,优化器实际上可以为我解决问题。是否存在适用于所有浮点数的数学恒等式?例如,我愿意写 !(x - x) 如果这意味着编译器可以假设它一直保持不变(尽管情况并非如此)。

我在网络上看到了一些对此类身份的引用,例如这里,但我没有找到任何有组织的信息,包括对 IEEE 754 标准的简单扫描。

如果我能让优化器假设 isnormal(x) 而不生成额外的代码(在 gcc 或 clang 中),那也很好。

显然,我实际上并不打算在我的源代码中编写 (x == x),但我有一个专为内联而设计的函数。该函数可以声明为 foo(float x, float y),但通常 x 为 0,或 y 为 0,或 x 和 y 均为 z 等。浮点数表示屏幕上的几何坐标。在这些情况下,如果我在不使用函数的情况下手动编码,我永远不会区分 0 和 (x - x),我只会手动优化愚蠢的东西。所以,我真的不关心编译器在内联我的函数后所做的 IEEE 规则,我只想让编译器忽略它们。舍入差异也不是很重要,因为我们基本上是在屏幕上绘图。

我不认为 -ffast-math 对我来说是一个选项,因为该函数出现在头文件中,并且使用该函数的 .c 文件与 -ffast-math 一起编译是不合适的。

0 投票
3 回答
1501 浏览

c - 布伦特寻根算法的流行实现中的“e”变量是什么?

我正在阅读布伦特根查找算法的标准(数字食谱和GSL C 版本相同)实现 ,并且无法理解变量“e”的含义。用法表明“e”应该是括号之间的先前距离。但是,当我们使用二分法时,为什么它设置为“xm”(距离的一半)?

0 投票
5 回答
6382 浏览

java - 数值 Java 库

我的大部分代码都是用 Java 编写的。对于标准化算法:矩阵运算、FFT ......我宁愿不使用我自己的纯 Java 实现,并且非常乐意使用不安全的 FFI/JNI 调用。

我应该研究哪些库?

谢谢!

0 投票
5 回答
2148 浏览

java - 如何编写数字Java代码?

在纯 Java中实现数值算法有哪些好的资源可供阅读?

我对 JVM 和 GC 的交互一无所知,并且很想了解更多。

0 投票
4 回答
12781 浏览

javascript - Javascript将字符串转换为数字?

如何将上述转换为0.25?

0 投票
3 回答
2742 浏览

.net - 处理 .NET 中的浮点错误

我正在使用 C#/.NET 进行科学计算和可视化项目,我们使用doubles 来表示所有物理量。由于浮点数总是包含一些舍入,我们有简单的方法来进行相等比较,例如:

很标准。

EPSILON然而,当我们遇到“相等”量的误差大于我们预期的情况时,我们经常发现自己不得不调整量级。例如,如果将 5 个大doubles 相乘,然后再除以 5 次,就会损失很多准确度。它已经到了我们不能让 EPSILON 变得更大的地步,否则它会给我们带来误报,但我们仍然会得到误报。

一般来说,我们的方法是寻找更多数值稳定的算法来使用,但该程序的计算量很大,我们能做的只有这么多。

有没有人有任何好的策略来处理这个问题?我对这种Decimal类型进行了一些研究,但我担心性能,而且我对它的了解还不够,不知道它是否会解决问题或只会掩盖问题。如果它可以解决这些问题,我愿意接受适度的性能损失(比如 2 倍)Decimal,但性能绝对是一个问题,并且由于代码主要受浮点运算的限制,我不认为这是一个不合理的担忧。我见过有人引用 100 倍的差异,这绝对是不可接受的。

此外,切换到Decimal还有其他复杂性,例如库中普遍缺乏支持Math,因此我们必须编写自己的平方根函数,例如。

有什么建议吗?

编辑:顺便说一句,我使用常量 epsilon(而不是相对比较)这一事实不是我的问题的重点。我只是把它放在那里作为一个例子,它实际上并不是我的代码片段。更改为相对比较不会对问题产生影响,因为当数字变得非常大然后又变小时,问题就会出现精度下降。例如,我可能有一个值 1000,然后我对其进行一系列计算,结果应该完全相同,但由于精度损失,我实际上有 1001。如果我再去比较这些数字,它不会如果我使用相对或绝对比较并不重要(只要我以对问题和规模有意义的方式定义了比较)。

无论如何,正如 Mitch Wheat 建议的那样,算法的重新排序确实有助于解决问题。