Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有可能在JavaScript中定义负数的平方根吗?_Javascript_Math_Complex Numbers - Fatal编程技术网

有可能在JavaScript中定义负数的平方根吗?

有可能在JavaScript中定义负数的平方根吗?,javascript,math,complex-numbers,Javascript,Math,Complex Numbers,我正在做一个类似JavaScript中内置数学的东西,但它还有其他功能,如阶乘、伽马函数、求和等。我计划做虚数,如负1的平方根。 当我看到-1^0.5(将一个数字提升到半次幂时的平方根)等于NaN。很多东西都等于NaN,比如1-“A”或1÷0等。以下是我的代码(部分): 我甚至想做一个函数来实现它。我的最后一个想法是另一个pow函数,当基数为负时,它不会放弃,可能会返回“i”或其他什么;但是,字符串可能不是最有效的方法,因为加法、减法、乘法、除法等是最难的部分。 是否有其他更好的方法来生成虚数,

我正在做一个类似JavaScript中内置数学的东西,但它还有其他功能,如阶乘、伽马函数、求和等。我计划做虚数,如负1的平方根。
当我看到
-1^0.5
(将一个数字提升到半次幂时的平方根)等于
NaN
。很多东西都等于NaN,比如1-“A”或1÷0等。以下是我的代码(部分):

我甚至想做一个函数来实现它。我的最后一个想法是另一个pow函数,当基数为负时,它不会放弃,可能会返回“i”或其他什么;但是,字符串可能不是最有效的方法,因为加法、减法、乘法、除法等是最难的部分。

是否有其他更好的方法来生成虚数,或者至少有任何方法会有所帮助,或者在JavaScript中这在技术上是不可能的?

您可以传递一个对象,该对象在数学运算中使用时会将自身解析为值:

var I={
 toString:_=>"I",
 valueOf:_=>NaN,
 pow:_=>I
}
用例:

console.log(I*2);//NaN
console.log(I+" is a string now");
console.log(I.pow(5));
在Math.pow中实现:

var temp=Math.pow
Math.pow=function(a,b){
  return temp(a,b) || I;
}

Number.prototype.pow=function(a){ return Math.pow(this,a);};

console.log(
 Math.pow(5,2),
 Math.pow(-1,0.5),//I
 Math.pow(5,2).pow(2),
 Math.pow(-1,0.5).pow(5)//I
);

你必须考虑两种模式,它们既有优点又有缺点,这取决于实际情况。 在实数模式下,
pow
函数有一个唯一的结果,如果有的话(即基是非负的),它遵循通常的幂律,如
a^(b+c)=a^b*a^c
(a*b)^c=a^c*b^c
a^(b*c)=(a^b)^c

复数模式下,
pow
函数几乎总是a结果。然而,定义关系/方程几乎总是有多个解,这些解也可能是该函数的值。对于有理指数,人们可能会想到集值结果,即多项式方程的根。对于无理指数,甚至是复杂指数,结果仅仅是连续存在的,没有内在的意义


允许这两种模式的通常方法是使用复杂数据类型,以便仅在该数据类型的参数上使用复杂版本的
pow
。由于javascript中不存在运算符重载,因此不能使用语法正确的复杂数据类型,必须使用类似于
c=a.mul(b)
c=complex.mul(a,b)

的语法才能定义
复杂类型。例如,请参见。然后还必须执行
(-1)^0.25=(1+i)/sqrt(2)
,因此确实需要复杂的数据类型。您认为
(-1)^0.26
(-1)^0.25001
的结果应该是什么?为什么?@Ryan,谢谢您的建议!:我很惊讶它有这么多的功能:)这不是我的意思。我的意思是变量I被视为-1的平方根,这是一个复数。在JavaScript中,它将负1的平方根视为非数字,这是我不想要的。我只想要这样的东西:
Math.pow(foo.I,2)=-1
,或者
Math.pow(-1,0.5)=foo.I
@Christian是否有其他更好的方法来生成虚数,或者至少有任何方法会有所帮助,或者在JavaScript中这在技术上是不可能的?
var temp=Math.pow
Math.pow=function(a,b){
  return temp(a,b) || I;
}

Number.prototype.pow=function(a){ return Math.pow(this,a);};

console.log(
 Math.pow(5,2),
 Math.pow(-1,0.5),//I
 Math.pow(5,2).pow(2),
 Math.pow(-1,0.5).pow(5)//I
);