问题标签 [exp]

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 投票
2 回答
1256 浏览

c++ - double exp(double) 意外返回 NaN(无浮点溢出)

我一直致力于根据普朗克定律实施黑体辐射,具体如下:

我有一个 float[max-min+1] 数组,其中 static const int max=780,static const int min = 380。我只是遍历数组,然后输入 BlackBody 为波长提供的值(波长 = array-指数 + 分钟)。IntensitySpectrum::BlackBody 执行此迭代,而 min 和 max 都是静态成员变量,并且数组也在 IntensitySpectrum 内部。

问题在于,线谱.BlackBody() 将数组的第 0 个元素设置为 NaN,并且只有第 0 个元素。此外,它不会发生在第一次迭代中,而是发生在 xc>=10 的所有以下迭代中。

来自 VS 调试器的文本:频谱 = {intensity=0x009bec50 {-1.#IND0000, 520718784., 537559104., 554832896., 572547904., 590712128., 609333504., ...} }

我跟踪错误, ::BlackBody() 函数中的 exppart 变为 NaN,基本上 exp() 返回 NaN,即使它的参数接近 2.0,所以绝对不会溢出。但仅适用于数组索引 0。它神奇地开始为其余 400 个索引工作。

我知道内存溢出可能会导致这样的事情。这就是为什么我仔细检查了我的内存处理。我正在从另一个自制的库中链接 Vec3,该库要大得多,并且可能包含错误,但我从 Vec3 使用的内容与内存无关。

几个小时后,我完全一无所知。还有什么可能导致这种情况?优化器或 WINAPI 是否在欺骗我……?(嗯,是的,该程序使用 WINAPI 创建了一个窗口,并使用了一个几乎为空的 WndProc,它在 WM_PAINT 上调用我的代码。)

感谢您提前提供帮助。

很抱歉弄得不清楚。这是布局:

0 投票
4 回答
1042 浏览

c - 预计算指数 (exp) 表

我正在尝试理解word2vec项目中的代码。我指的文件是word2vec.c。代码片段是:

目前尚不清楚预先计算这些值有什么好处。有人可以解释一下吗?

0 投票
1 回答
270 浏览

c - 如何在 NASM for Linux 中正确使用 C 函数“Exp”?

我正在尝试在 Linux 的 NASM 中实现 C 函数“exp”。该函数接受一个双精度值 x,并返回一个双精度值 r = e^x,其中 e 是欧拉数。这是我的实现:

在编译尝试时,我得到以下信息:

这是指当我实际调用 exp 时,这很奇怪,因为“extern exp”似乎工作得很好。我做错了什么?

0 投票
1 回答
58 浏览

c - 将函数 e^(-x) 和 e^(-x^2) 传递到 C 中用于计算的函数中

我必须编写一个程序,将函数传递给另一个函数e^(-x)e^(-x^2)称为calculateIntegral(),然后计算函数的积分。

限制:

  • calculateIntegral()是将用于计算两者积分的e^(-x)函数e^(-x^2)
  • 我只能将传递的函数、a边界b和区间数作为函数的参数calculateIntegral()

我曾考虑过更改x为,例如,-x在函数外部并将其分配给另一个变量以计算 in e^(x),但随后我必须将其作为另一个参数包含在calculateIntegral().

有没有办法改变原来的e^(x),所以当它被传递到时calculateIntegral()e^(-x)剩下的函数只需将边界插入到该方程中进行计算?

0 投票
2 回答
460 浏览

matlab - Matlab,exp函数溢出

谁能建议我如何找到expMatlab 中的函数不会溢出的最大值和溢出的最小值。
谢谢你!

0 投票
1 回答
1692 浏览

performance - MATLAB中加速exp(A*x)的解析方式

我需要f(x)=exp(A*x)反复计算一个微小的可变列向量x和一个巨大的常量矩阵A(多行,几列)。换句话说,x很少,但A*x很多。我的问题维度是这样的,它A*x需要与 exp() 部分一样多的运行时间。

除了泰勒展开和预先计算一系列值exp(y)(假设已知 的y值范围A*x),相对于 MATLAB 自己所做的事情,我还没有设法显着加快(同时保持准确性),我是考虑分析重述问题,以便能够预先计算一些值。

例如,我发现exp(A*x)_i = exp(\sum_j A_ij x_j) = \prod_j exp(A_ij x_j) = \prod_j exp(A_ij)^x_j

这将允许我预先计算exp(A)一次,但循环中所需的求幂与原始函数调用一样昂贵exp(),并且必须另外执行乘法 (\prod)。

有没有我可以遵循的其他想法,或者我可能错过的 MATLAB 中的解决方案?

编辑:更多细节

A是 26873856 x 81 的大小(是的,它是那么大),所以x是 81 x 1。 nnz(A) / numel(A)0.0012nnz(A*x) / numel(A*x)0.0075。我已经使用稀疏矩阵来表示A,但是,稀疏矩阵的 exp() 不再是稀疏的。所以事实上,我存储xnon-sparse 并且我计算exp(full(A*x))结果是快/慢full(exp(A*x))(我认为A*x无论如何都是非稀疏的,因为 x 是非稀疏的。)exp(full(A*sparse(x)))是一种拥有 sparse 的方法A*x,但速度较慢. 甚至更慢的变体是exp(A*sparse(x))(对于稀疏类型的非稀疏矩阵具有双倍的内存影响)和full(exp(A*sparse(x))(这再次产生非稀疏结果)。

是的,我确实计算了元素 exp,我更新了上面的等式以反映这一点。

另一个编辑:我试图变得聪明,但收效甚微:

0 投票
1 回答
1430 浏览

c++ - std::exp 给出的结果与复数的 MATLAB exp 不同

我正在将一个脚本从 matlab 复制到一个 c++ 函数中。但是,对于 exp 函数,我不断得到不同的结果。例如,以下代码段:

应该等同于 MATLAB 代码

但事实并非如此。对于 MATLAB,我得到 -1 + 0i(这是正确的),对于 c++,我得到 -1 + -2.068231e-013*i。

现在我一开始以为这只是某种舍入误差,但是对于我正在使用的实际脚本,它具有更大的复指数,我得到完全不同的数字。这是什么原因?我该如何解决?

编辑:我已经手动尝试用欧拉公式计算指数

并在 c++ 中获得相同的不稳定结果

0 投票
1 回答
604 浏览

c++ - How to use the overloaded and original exp inside a member of a template class

I am using a template class (Pol<T>) to calculate with polynomials and want to use a member function (.exp()) to convert a polynomial P into its exponential e^P.
Overloading the exponential function works fine, the compiler chooses the original exponential exp(double) if T = double and my own if T=Pol<double>, but in the member function I get:

I cannot use std::exp in the member function, since I am using multiple orders of polynomials like:

I could use the overloaded exponential to make a workaround, but I don't see, why it should not be possible inside the member.

Here is my code:

0 投票
2 回答
991 浏览

matlab - 数值稳定的实现

我需要在 Matlab 中计算向量的归一化指数。

简单地写

V 的元素中的溢出大于 log(realmax) = 709.7827。(我不确定下溢条件。)

我应该如何实现它以避免数值不稳定?

更新:我收到了关于如何避免溢出的优秀回复。但是,我仍然很高兴听到您对代码中下溢可能性的看法。

0 投票
1 回答
147 浏览

c - C中的错误结果

我想编写一个使用高斯算法计算求幂的程序,但是如果给定输入等 base=2,exp=50,我得到的结果是 0.0000。