Std::expm1(z)表示复数z
std::expm1(z) for complex z?
标准c++库仅为真正的x
提供std::expm1(x)
。对于复杂的z
,是否有std::expm1(z)
的实现?
不在标准库中,没有
可能值得建议在将来的版本中包含它
exp(a + i*b) - 1
= exp(a) * (cos(b) + j*sin(b)) - 1
= exp(a)*cos(b)-1 + j*exp(a)*sin(b)
= (exp(a)-1)*cos(b) + (cos(b)-1) + j*exp(a)*sin(b)
= expm1(a)*cos(b) + (cos(b)-1) + j*exp(a)*sin(b)
^^^^^^^^^^
唯一会有准确性问题的是突出显示的项(对于小b
),因为我们将采用非常小的第一项,加上cos(b)
,这几乎是1(即相对巨大),然后减去1。一般来说,这样做会破坏第一项的准确性。
幸运的是,计算先驱已经遇到了这个问题,并给了我们一个解决方案,称为cosm1(..)
,它精确地实现了(cos(b)-1)
对于小b
。例如,下面是SciPy使用的C语言实现。我不能在<cmath>
中看到它,所以它可能被认为太模糊了。
相关文章:
- std::is_base_of表示ctor编译错误
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 广义 std::function (std::any 表示可调用对象)
- 在 C++17 中表示 std::byte 文字的正确方法是什么?
- 为什么 std::p ut_time(std::gmtime 采用 %z 格式返回 +0100 表示 UTC?
- 迭代表示为 std::basic_string_view 的正则表达式子匹配
- std::any 表示无法复制构造的对象
- 在二进制表示中将二进制 std::string 转换为 int
- C++17 使用 std::variant 来表示 DOM
- 使用std :: bitset进行双重表示
- std::wstring中ASCII符号的字节表示,具有不同的语言环境
- Gtest使用C++11 std::condition_variable表示valgrind错误
- std::哈希表示无序映射中的唯一 PTR
- 为什么不能将 int(表示 ASCII 字符)转换为 std::字符串,而没有大括号环绕在 int 周围?
- 数组索引表示法,其中 std::shared_ptr 到数组
- 在std::向量中表示原始字节的最佳方式
- 使用 std::unique_ptr 表示 Windows HANDLEs
- istream_iterator<T> 表示 std::endl
- wxWidgets表示std::map的小部件