Javas数学。sin()产生的南所有的时间
题
原谅我如果这是一个笨的初学者的问题,但是我真的不会得到它。
我有一件声明的变量,像这样:
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位?是否有其他代码在中间,你没有糊?
唯一的方法获得一个 NaN
从 Math.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个选择:
- 代码你是不是代码,你正在使用(我注意到你有一个较低的情况下S上系统,因此这不会汇编)
- 别的东西被改变价值的价值对南之前或之后你们做数学题。sin
对于初学者来说,你使用 Double
基准(包装)的类型,不 double
基本类型-为什么?是什么代码,你实际使用的初始化 Value
(其中,顺便说一句,不应该开始与一个大写字母的基础上共同Java的编码标准)?我猜你只是没有初始化 Value
正确。试着开始使用 double
(不一 Double
).
不隶属于 StackOverflow