小编Ste*_*ppo的帖子

C++如何处理NAN?有标准方式还是编译器依赖?

在需要处理sin(x)/ x函数的程序中,我遇到了NAN问题,我简化了以下代码中的问题:

#include <iostream>
#include <cmath>

int main()
{
    std::cout.precision(15);

    //This line compiles and run in g++, but does not compile in Visual Studio 2013
    std::cout << 0.0/0.0 << std::endl;

    //This line compiles and run in both g++ and VS2013
    std::cout << std::sin(0.0)/0.0 << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在g ++中,输出为:-nan -nan,在VS2013中,输出为:-1.IND,因为第一行没有编译所以我把它注释掉了.

我的问题是:

  1. 这个'-1.IND'是什么意思?

  2. 似乎NAN处理依赖于编译器,这应该在C++中标准化吗?为什么?

  3. 我用这个hack来处理这个问题:

    double sinc(double x)
    {
        if(x == 0.0)
            return 1.0;
        return std::sin(x)/x;
    }
    
    Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

编辑:另一个问题,4.为什么VS2013处理0.0/0.0和sin(0.0)/0.0不同?

c++ floating-point nan

18
推荐指数
2
解决办法
2391
查看次数

类型为double的静态类成员的常量表达式初始值设定项

在C++ 11和C++ 14中,为什么我需要constexpr在以下代码段中:

class Foo {
    static constexpr double X = 0.75;
};
Run Code Online (Sandbox Code Playgroud)

而这个产生编译错误:

class Foo {
    static const double X = 0.75;
};
Run Code Online (Sandbox Code Playgroud)

(更令人惊讶的是)这个编译没有错误?

class Foo {
    static const double X;
};

const double Foo::X = 0.75;
Run Code Online (Sandbox Code Playgroud)

c++ static-members constant-expression c++11 c++14

16
推荐指数
1
解决办法
1258
查看次数

目前有什么替代std :: dynarray吗?

C++ 11给了我们很棒std::array,这需要在编译时知道大小:

std::array<int, 3> myarray = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

现在,我碰巧有一些旧的short*缓冲区要包装,其大小将在运行时才知道(当然它将是).

C++ 14将定义std::dynarray为涵盖这种情况,但dynarray在GCC 4.7和Clang 3.2中尚不可用.

那么,有没有人知道一个与std::array(在效率方面)相当但不需要在编译时指定大小的容器?我怀疑Boost已经为我做好了准备,虽然我找不到任何东西.

c++ c++11 c++14

15
推荐指数
3
解决办法
4429
查看次数

使用cProfile将python脚本配置到外部文件中

我是python编程的新手.我有一个python脚本,我正在尝试使用cProfile命令对其进行配置.我键入以下内容

python -m cProfile -o readings.txt my_script.py
Run Code Online (Sandbox Code Playgroud)

它产生了readings.txt.但是当我尝试使用任何标准文本编辑器或记事本打开文件时,文件无法正常打开.它不包含数据

谁能告诉我如何将这些统计信息存储到可以使用记事本打开的外部文件中?

我正在使用Windows平台

python cprofile

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

SSL握手异常:"算法约束检查失败:MD5withRSA"

我尝试安装Oracle Entitlements Server Client.我打电话的时候

config.cmd -smConfigId Sample-SM -prpFileName C:\oracle\product\11.1.2\as_1\oessm\SMConfigTool\smconfig.java.controlled.prp 
Run Code Online (Sandbox Code Playgroud)

我有这个例外:

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
        at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:702)
        at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
        at java.io.OutputStream.write(OutputStream.java:75)
        at oracle.security.oes.enroll.EnrollmentClient.writeToSocket(EnrollmentClient.java:330)
        at oracle.security.oes.enroll.EnrollmentClient.enroll(EnrollmentClient.java:161)
        at oracle.security.oes.enroll.EnrollmentClient.main(EnrollmentClient.java:478)
        at oracle.security.oes.tools.EnrollmentTool.doEnroll(EnrollmentTool.java:103)
        at oracle.security.oes.tools.SMConfigTool.doEnrollment(SMConfigTool.java:1192)
        at oracle.security.oes.tools.SMConfigTool.run(SMConfigTool.java:617)
        at oracle.security.oes.tools.SMConfigTool.main(SMConfigTool.java:546)
    Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA
        at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:350)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:260)
        at …
Run Code Online (Sandbox Code Playgroud)

java ssl

10
推荐指数
2
解决办法
4万
查看次数

"和不包含"的Xpath语法

这是我试图使用的XPath:

//div[contains(@class='xyz ng-binding ng-scope') and not(contains(@class = 'ng-hide'))]
Run Code Online (Sandbox Code Playgroud)

我不确定这是什么正确的语法.基本上HTML看起来像:

class="xyz ng-binding ng-scope typeA ng-hide"
class="xyz ng-binding ng-scope typeB ng-hide"
Run Code Online (Sandbox Code Playgroud)

我想选择在HTML或者是情况typeA或者typeB,但没有ng-hide.

xpath qtp

9
推荐指数
2
解决办法
3万
查看次数

Gradle - 如何在Gradle中添加一些延迟暂停挂起

我正在寻找一种方法,在两个gradle任务的调用之间插入几秒的暂停.

我可以用

firstTask.doLast {

.....

}
Run Code Online (Sandbox Code Playgroud)

类似于Linux/Unix的东西

sleep 45
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sleep task delay gradle onpause

7
推荐指数
1
解决办法
1万
查看次数

我们可以使用c在linux中创建进程的方法有多少

我在Linux中创建进程时感到困惑.到目前为止,我认为我们可以通过调用以下系统调用来创建进程.

  1. system()
  2. exec() 系统调用系列
  3. fork() 系统调用

但:

  1. system():但是当"系统"系统调用执行shell和shell上的输入可执行文件时,正在创建一个子进程来执行输入.所以shell调用子进程然后我们可以说fork正在为此创建进程.

  2. exec系统调用:当这个系统调用时,用新进程写入当前正在运行的进程.因此它也创建了一个新进程但使用相同的地址空间.我认为它也在调用call fork来创建进程.

我很困惑以上事实是创建新进程或只有fork系统的可能方法.

c linux shell

6
推荐指数
1
解决办法
3059
查看次数

使用SWIG处理std :: function

显然,SWIG不理解std::function和破坏Python绑定.例如,这适用于C++:

// Somewhere in the API
typedef std::function<void(const UnitError & error)> UnitErrorHandler;

// Somewhere else in the API
void Unit::setErrorHandler(const UnitErrorHandler & handler) {}

// In the application code
unit->setErrorHandler([](const UnitError & error){
    std::cerr << error << std::endl;
    std::exit(1);
});
Run Code Online (Sandbox Code Playgroud)

但这会破坏代码(除了为了简单起见而有不同的行为,但这不是重点):

unit.setErrorHandler(lambda error: len(error))
Run Code Online (Sandbox Code Playgroud)

情况与def(普通)未绑定功能相同.那么,有没有人知道这方面的解决方法?

c++ swig c++11

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

如何在PHP中手动解析HTTP(S)连接中的主机

Curl具有手动指定要将主机解析到的IP的功能.例如:

curl https://www.google.com --resolve "www.google.com:443:173.194.72.112"
Run Code Online (Sandbox Code Playgroud)

这在使用HTTPS时特别有用.如果它只是一个HTTP请求,我可以通过直接指定IP地址并添加主机头来实现相同的目的.但是在HTTPS中会破坏连接,因为SSL证书主机将与IP地址而不是主机头进行比较.

我的问题是,我怎样才能在PHP中做同样的事情?

php https

5
推荐指数
2
解决办法
4139
查看次数

标签 统计

c++ ×4

c++11 ×3

c++14 ×2

c ×1

constant-expression ×1

cprofile ×1

delay ×1

floating-point ×1

gradle ×1

https ×1

java ×1

linux ×1

nan ×1

onpause ×1

php ×1

python ×1

qtp ×1

shell ×1

sleep ×1

ssl ×1

static-members ×1

swig ×1

task ×1

xpath ×1