以文本方式查看主题 - 中华农历论坛 (http://bbs.nongli.net/index.asp) -- 历法知识 (http://bbs.nongli.net/list.asp?boardid=2) ---- [讨论]JavaScript的算术运算还真有点奇怪 (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=47214) |
-- 作者:秦汉昌 -- 发布时间:2011/6/19 21:32:00 -- [讨论]JavaScript的算术运算还真有点奇怪 function XL0_calc(xt,zn,t,n){ //xt星体,zn坐标号,t儒略世纪数,n计算项数
我计算 XL0_calc(1,0,1.114532,10) 当计算到 v/=F[0]; 的上一行时 v=2912419233242.7744 经验证,结果 正确
再往下算,由于 F[0]=1000000000,所以 v/=F[0] = 2912.4192332428 也正确
由于 xt=1 zn=0 所以后面的代码中,只需计算 v += -3*t/rad;
而t=t/10=1.114532/10=0.1114532 ,-3*t/rad= -0.0000016210 因此,v += -3*t/rad=2912.4192332428 -0.0000016210 = 2912.4192316218
从程序的运行规律规律来看,这样计算的答案 应该是正确的 但是,通过运行整个程序,得到的最终结果 却有差异,实际结果为:2912.4192312033106
请高人指点迷津
|
-- 作者:秦汉昌 -- 发布时间:2011/6/19 21:38:00 -- 注: var rad = 180*3600/Math.PI; //每弧度的角秒数 |
-- 作者:秦汉昌 -- 发布时间:2011/6/19 21:39:00 -- 这个差异导致结果从第七位小数开始不相同 |
-- 作者:秦汉昌 -- 发布时间:2011/6/19 21:40:00 -- 从天文计算的角度讲,不知精确到前六位会不会对计算的准确性产生较大影响 |
-- 作者:浪-淘-沙 -- 发布时间:2011/6/19 21:49:00 -- 2912.4192316218 与2912.419231621753
有区别吗?四舍五入而已。
且有14位有效数字,你还嫌少? |
-- 作者:秦汉昌 -- 发布时间:2011/6/19 22:11:00 -- 结果为:2912.4192312033106document.getElementsByTagName是我们接触到的domcument文档对象模型的第二个接口,它的作用通过它的名字很容易理解:它解析文档获取具有指定标记名称的一个列表,在这里document.getElementsByTagName("h1")[0]得到文档中的第一个&1th1>标记。
测试原码如下:
<html> <style> </style> <script type="text/JavaScript"> </script> <h1> |
-- 作者:秦汉昌 -- 发布时间:2011/6/19 22:18:00 -- 以下是引用浪-淘-沙在2011-6-19 21:49:00的发言:
2912.4192316218 与2912.419231621753
有区别吗?四舍五入而已。
且有14位有效数字,你还嫌少? 不好意思,我在一楼把许老师的源码实际测试结果弄错了,许老师的代码结果应该是:2912.4192312033106 |
-- 作者:秦汉昌 -- 发布时间:2011/6/19 22:19:00 -- 是从第六位开始,有差异了 |
-- 作者:浪-淘-沙 -- 发布时间:2011/6/19 22:24:00 -- 以下是引用秦汉昌在2011-6-19 22:19:00的发言:
是从第六位开始,有差异了 还是看有效数字的。 有10位有效数字,应当也不会影响结果。
如果原始数据的有效位数很低,比如只有6位,你计算得到10位数字,意义也不大的。
一个程序里的中间量的有效位数,不必太在意。你要看结果与“真值”之间的有多大的差别。 |
-- 作者:秦汉昌 -- 发布时间:2011/6/19 22:34:00 -- 呵呵,已经有十个有效数字位是正确的了 呵呵,只要不影响天文计算,我也不想再去深研了 |