小编Max*_*ell的帖子

使用具有128位精度的Lapack

我正在尝试使用Lapack进行矩阵奇异值分解(SVD)的128位精度计算,我发现有一些黑色编译器魔术可以实现这一点.英特尔Fortran编译器(ifort)支持-r16指示编译器将所有变量声明为DOUBLE PRECISION128位实数的选项.所以我使用以下方法编译了Lapack和BLAS:

ifort -O3 -r16 -c isamax.f -o isamax.o
ifort -O3 -r16 -c sasum.f -o sasum.o
...
Run Code Online (Sandbox Code Playgroud)

要将其合并到我的程序(也就是C++)中,我可以使用英特尔C++编译器(icc)和-Qoption,cpp,--extended_float_type创建数据类型_Quad为128位浮点变量的选项.我的SVD示例如下所示:

#include "stdio.h"
#include "iostream"
#include "vector"

using namespace std;
typedef _Quad scalar;

//FORTRAN BINDING
extern "C" void dgesvd_(char *JOBU, char *JOBVT, int *M, int *N,
    scalar *A, int *LDA,
    scalar *S,
    scalar *U, int *LDU,
    scalar *VT, int *LDVT,
    scalar *WORK, int *LWORK, int *INFO);

int main() {
    cout << …
Run Code Online (Sandbox Code Playgroud)

c++ fortran lapack 128-bit

12
推荐指数
1
解决办法
1400
查看次数

通过ac#generator设置最大独立子集

我想找到给定集合的所有子集,这些子集是互斥的,并且包含尽可能多的超集元素.用户定义排他性的含义:

bool exclusion<T>(T a, T b)
Run Code Online (Sandbox Code Playgroud)

至少exclusion(a, b) == exclusion(b, a)在哪里举行.

exclusion(a, b) == true保证如果a.Equals(b) == true

我的代码看起来像这样:

public static HashSet<HashSet<T>> MutuallyExclusive<T>(this IEnumerable<T> available, Func<T, T, bool> exclusion) {
    HashSet<HashSet<T>> finished = new HashSet<HashSet<T>>(new HashSetEquality<T>());
    Recursion<T>(available, new HashSet<T>(), finished, exclusion);
    return finished;
}

private static void Recursion<T>(IEnumerable<T> available, HashSet<T> accepted, HashSet<HashSet<T>> finished, Func<T, T, bool> exclusion) {
    if (!available.Any())
        finished.Add(accepted);
    else
        foreach (T a in available)
            Recursion<T>(available.Where(b => !exclusion(a, b)), new HashSet<T>(accepted) { a }, …
Run Code Online (Sandbox Code Playgroud)

c# iterator set

5
推荐指数
1
解决办法
109
查看次数

标签 统计

128-bit ×1

c# ×1

c++ ×1

fortran ×1

iterator ×1

lapack ×1

set ×1