相关疑难解决方法(0)

为什么includes() 和indexOf() 在搜索NaN 时的工作方式不同?

//indexOf()
console.log([1, 2, NaN].indexOf(NaN)); //-1

//includes()
console.log([1, 2, NaN].includes(NaN)); //true
Run Code Online (Sandbox Code Playgroud)

我不明白为什么includes可以在数组中找到 NaN,而indexOf不能。

我读到它的发生是因为indexOf内部使用了严格相等运算符(NaN === NaN)。但对我来说,当我们谈论 时,严格相等运算符和抽象相等运算符之间没有区别NaNNaN无论如何都不能等于它自己。

//strict equality operator
console.log(NaN === NaN); //false

//abstract equality operator
console.log(NaN == NaN); //still false
Run Code Online (Sandbox Code Playgroud)

那么为什么这两种方法之间存在一些差异呢?

javascript arrays indexof

3
推荐指数
1
解决办法
588
查看次数

将 NaN 或 Inf 与 0 相乘得到 0

我有一组值 a[i]

然后我计算

for(...){
  b[i] = log(a[i]);
}
Run Code Online (Sandbox Code Playgroud)

然后我总结

for(...){
  s += c[i] * b[i];
}
Run Code Online (Sandbox Code Playgroud)

到目前为止这没有问题。

但对于某些人来说,ia[i]可能为零并导致b[i] = log(0) = -Inf. 对于这些i,c[i]也为零 - 这些是一些无效的数据点。但zero*-Inf似乎给了NaN,我的总和搞砸了......

有没有办法c[i] * b[i]c[i]is = 0时总是有= 0?

我看到的唯一方法是将所有零设置a[i]为一个小的非零值或检查零,但可能有更好的解决方案。

我使用 C++ 和std数学函数,但我正在寻找一种尽可能通用的方法。

c++ nan

2
推荐指数
1
解决办法
5092
查看次数

C IEEE-Floats inf等于inf

在C中,在使用IEEE-754浮点数的实现中,当我比较两个NaN的浮点数时,它返回0或"false".但是为什么两个浮点数都被认为是相等的呢?

这个程序打印"相等:......"(至少在Linux AMD64下使用gcc),在我看来它应该打印"不同:......".

#include <stdio.h>
#include <stdlib.h>

int main(void)
  {
    volatile double a = 1e200; //use volatile to suppress compiler warnings
    volatile double b = 3e200;
    volatile double c = 1e200;
    double resA = a * c;  //resA and resB should by inf
    double resB = b * c;
    if (resA == resB)
      {   
        printf("equal: %e * %e = %e = %e = %e * %e\n",a,c,resA,resB,b,c);
      }   
    else
      {   
        printf("different: %e * %e = %e != %e = %e * …
Run Code Online (Sandbox Code Playgroud)

c floating-point ieee-754

2
推荐指数
1
解决办法
622
查看次数

特殊值不能用作unordered_map中的键

对于像NAor 这样的特殊值NaN,boost::unordered_map每次使用时都会创建一个新密钥insert.

// [[Rcpp::depends(BH)]]
#include <boost/unordered_map.hpp>
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
void test_unordered_map(NumericVector vec) {

  boost::unordered_map<double, int> mymap;
  int n = vec.size();
  for (int i = 0; i < n; i++) {
    mymap.insert(std::make_pair(vec[i], i));
  }

  boost::unordered_map<double, int>::iterator it = mymap.begin(), end = mymap.end();
  while (it != end) {
    Rcout << it->first << "\t";
    it++;
  }
  Rcout << std::endl;
}

/*** R
x <- c(sample(10, 100, TRUE), rep(NA, 5), NaN) + …
Run Code Online (Sandbox Code Playgroud)

c++ boost r rcpp

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

如何在Javascript中包含NaN时评估比较?

我理解这背后的原因.我对技术实施感到好奇.无法在某个地方找到这个.

我的理论是,只要在任何比较中评估左NaN,它就会自动返回false而根本不进行比较.它是否正确?

javascript nan

2
推荐指数
1
解决办法
67
查看次数

什么时候 f != f 为真?

任何人都可以详细说明syscalls/js为什么在第 57 行有一个声明

if f != f { ... }
Run Code Online (Sandbox Code Playgroud)

f是类型float64)。

这怎么可能?就像一个语句时,可以i != itruego

syntax go

2
推荐指数
1
解决办法
129
查看次数

"符合标准的编译器可能选择不实现非规范化浮点数"的意义是什么?

ISO/IEC 9899:2011§5.2.4.2.210(p48)说:

是否存在次正规数的特征是FLT_HAS_SUBNORM,DBL_HAS_SUBNORMLDBL_HAS_SUBNORM的实现定义值:

-1不确定
0缺席(类型不支持次正规数)
1存在(类型支持次正规数)

什么了!所以在某些平台上我不能写double d = 33.3?或者编译器会自动将其转换为333E-1存在或不存在非标准化浮点数的实际意义是什么?

c floating-point language-lawyer c11

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

Haskell:比较NaN值

quickcheck为一个优化和评估函数的Haskell程序编写了测试.

问题是quickcheck生成表达式,结果NaN如下:

> acos(2)
NaN
Run Code Online (Sandbox Code Playgroud)

Haskell将以下语句评估为false:

> acos(2)==acos(2)
False
Run Code Online (Sandbox Code Playgroud)

所以我的quickcheck测试因这种比较而失败.有没有办法比较NaN价值观?

haskell nan

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

为什么NaN大于JavaScript中的任何数字?

这是一个例子:

parseInt(50) > parseInt('a');
Run Code Online (Sandbox Code Playgroud)

在控制台上执行此操作时,它将返回false.我的原始代码看起来有点像这样:

variableB = parseInt(jQuery('some-element').html());
if(parseInt(variableA) > variableB)
     // do something
else
     // do something else
Run Code Online (Sandbox Code Playgroud)

有时some-element不会被填补,因此返回NaN.发生这种情况时,我确实希望else执行该块.我实际上得到了我的期望,但我只是想确保它确实打算以这种方式工作.

javascript

1
推荐指数
2
解决办法
2540
查看次数

'in'运算符是否使用"=="或"is"进行比较?

在像str in [str1, str2, str3]或的Python表达式1 in [1, 2, 3]中,in运算符是使用==还是is将第一个对象与列表中的对象进行比较?

python python-2.7 containment

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