我执行了以下代码:
tau <- 0.25
h <- 0.6 * n ^ (-1 / 5) * (4.5 * dnorm(qnorm(tau)) ^ 4 * qnorm(tau) /
(2 * (qnorm(tau) ^ 2 + 1)) ^ 2) ^ (1/5),
和R不断产生NaN
。但是,R实际上会将(4.5 * dnorm(qnorm(tau)) ^ 4 * qnorm(tau) / (2 * (qnorm(tau) ^ 2 + 1)) ^ 2)
计算为等于-0.003655336
。
奇怪的是我做了以下的事情
k <- -0.003655336
k ^ (1 / 3)
再次制作了 NaN
。
答案 0 :(得分:2)
您正在计算负数的立方根。虽然正如@ mra68所指出的那样,存在一个真实的解决方案,但是负数的非整数指数的一般情况会导致复数。由于默认情况下R假设您正在处理实数,因此它会生成NaN
。
试试这个:
k <- -0.003655336
k <- as.complex(k)
k ^ (1 / 3)
#[1] 0.0770216+0.1334053i
结果并不是唯一的,因为有三个复数x
满足条件x^3=k
(包括虚部为零的情况),但NaN
输出与非整数的一般情况一致,作为负实数的指数。可能有人认为,理性指数和非理性指数之间的区别可能是有用的,但在浮点计算中,这几乎是不可能的。我会考虑在负数的非整数指数的情况下NaN
的出现是一个有用的警告标志。
答案 1 :(得分:1)
负数的第5个根仍然是可能的。我的袖珍计算器也做到了。由于(-1)^ 5 = -1,你可以这样做:
> tau <- 0.25
> a <- (4.5 * dnorm(qnorm(tau)) ^ 4 * qnorm(tau) / (2 * (qnorm(tau) ^ 2 + 1)) ^ 2)
> sign(a)*abs(a)^ (1/5)
[1] -0.3255258
>
答案 2 :(得分:0)
请修改您的问题。 你给了自己答案。是基础数学。您不能将负数的幂赋予十进制数的幂。这是不确定的。