原谅我如果这是一个笨的初学者的问题,但是我真的不会得到它。

我有一件声明的变量,像这样:

public Double Value;

当我给3.14159265价值,并尽量计算的正弦,这样的情况:

system.out.println(Value.toString()); //outputs 3.14159265
Value = Math.sin(Value);
system.out.println(Value.toString()); //outputs NaN

事实上,这种情况与每个单一的价值,我尝试甚至0!数学。sin()似乎总是产生NaN结果,不论的参数值。

该文件说:

如果参数是南或一个无限的,那么结果是楠。

但我的论点显然是不NaN或无穷大!

到底是什么发生的吗?

更新

事实证明我是最愚蠢的程序员,在地球上。在我的项目的整个编码当然是复杂得多的比例上。这是一种表达式分析器&评估程序和定义的数学功能我用一切的条款来决定哪些功能呼叫 我忘了打破声明的情况下 这引起了sqrt要执行的功能有负面的参数。

正如我所说的-最愚蠢的程序员,在地球上的...

我接受了最顶层的答案,因为它是最好的恕我直言。对不起伙计们浪费了你的时间.-

有帮助吗?

解决方案

Double value = 3.14159265;
System.out.println(value.toString()); //outputs 3.14159265
value = Math.sin(value);
System.out.println(value.toString()); //outputs NaN

产出(预期):

3.14159265
3.5897930298416118E-9

所以问题应该在其他地方版本的JAVA你们使用?它是32位或64位?是否有其他代码在中间,你没有糊?

唯一的方法获得一个 NaNMath.sin 是通过使用 inf o NaN 作为参数。并没有明确分配,值到一个数字,你可以获得在刚通过这样做是错误的计算,例如:

Double d = 0.0/0.0;
System.out.println(Math.sin(d));
double d2 = Double.POSITIVE_INFINITY;
System.out.println(Math.sin(d2));

这将产出: NaN 两次。

两个注:

  • 不要使用大写字母的变量(使用 value, ,不 Value)
  • 当你需要刺作为参数(或成为其他串)你不需要明确地呼叫 toString(), 你可以做的 System.out.println(value)

其他提示

这就是我得到的:

Double Value;
Value = 3.14159265 ;
System.out.println(Value.toString()); //outputs 3.14159265
Value = Math.sin(Value);
System.out.println(Value.toString()); //outputs 3.5897930298416118E-9

因此,有2个选择:

  1. 代码你是不是代码,你正在使用(我注意到你有一个较低的情况下S上系统,因此这不会汇编)
  2. 别的东西被改变价值的价值对南之前或之后你们做数学题。sin

对于初学者来说,你使用 Double 基准(包装)的类型,不 double 基本类型-为什么?是什么代码,你实际使用的初始化 Value (其中,顺便说一句,不应该开始与一个大写字母的基础上共同Java的编码标准)?我猜你只是没有初始化 Value 正确。试着开始使用 double (不一 Double).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top