等式-e** - (( - log(7)/100.0)*(100-x))+ 7返回NaN

use*_*567 5 python java curve algebra nan

我正在尝试将此曲线作为我正在进行的小型游戏的练级系统的一部分.等式如下

f(x) = -e^-((-log(7)/100)*(100-x))+7
Run Code Online (Sandbox Code Playgroud)

在python中可以定义为

f=lambda x:-e**-((-log(7)/100.0)*(100-x))+7
Run Code Online (Sandbox Code Playgroud)

在Python控制台中运行此函数将返回预期的值.我把它移植到Java,它的形式为:

public static double f(float x) {
    return (Math.pow(-Math.E, -((-Math.log(7)/100)*(100-x)))+7);
}
Run Code Online (Sandbox Code Playgroud)

然而,神秘地,这总是回归NaN.我以前从未遇到过这个问题,发生了什么事?

Mar*_*oun 5

Math#pow:

如果第一个参数是有限且小于零,那么如果第二个参数是有限的而不是整数,那么结果是NaN.

在你的情况下..就是这样.

总是看文档,它们为您节省了大量时间.

  • +1简明的答案.虽然最后一部分是好建议,但那个特定的文件会让你的眼睛流血.由于作者没有注意到使人们可以通过眼睛轻松解析文本的人性方面,这可能解释了操作系统如何错过它,因此在演示文稿中没有注意,注意细节或创造性.:)那些文档是高噪声低信号,这就是Stack Overflow获胜的原因. (2认同)

Ult*_*nct 5

(把我的评论作为答案)

表达方式不一样.在python中它看起来像-(e**someNum).在java中它看起来像(-e)**someNum.

想一想(以一种非常原始的方式),当你将负数多次无理解时,你会得到什么.这就是为什么你得到一个NaN.


你想要的Java是这样的:

public static double f(float x) {
    return 7 - Math.pow(Math.E, -((-Math.log(7)/100)*(100-x)));
}
Run Code Online (Sandbox Code Playgroud)