标题:再次请教精度问题(继4月18日《请教筛选平方数》之续)
只看楼主
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
结帖率:73.44%
已结贴  问题点数:13 回复次数:12 
再次请教精度问题(继4月18日《请教筛选平方数》之续)
用以下代码
VFP筛选平方数.rar (1.56 KB)

CLEAR
CLOSE  all
SET SAFETY OFF
SET DECIMALS TO 9
USE 记录表
PACK
ZAP
  FOR n=85520000 TO 85553220                  
   FOR i=66610000 TO 66611050
列1 = 2*n*n-i*i            
    IF   INT(SQRT(列1))=SQRT(列1)   
        APPEND BLANK
        REPLACE  n的值 WITH  n
        REPLACE  i的值 WITH  i                                               
        REPLACE  平方数记录 WITH  SQRT(2*n*n-i*i)
       ELSE     
       LOOP      
    ENDIF
 ENDFOR
ENDFOR
*------------
  DELETE FILE *.BAK
 MESSAGEBOX('本 次 运 行 结 束 !!',64,'信息提示')
 运行得到:
当n=85529712、i=66610043时,SQRT(2*n*n-i*i)=100964179,但通过笔算2*n*n-i*i=10193765441144039,而100964179*100964179=10193765441144041,显然前者比后者小2,出现误差了,请教先生们如何才能使代码运行得到精确结果,谢谢
搜索更多相关主题的帖子: 精度 平方 SQRT REPLACE WITH 
2018-04-20 14:22
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:13 
看看是否与这个有关(VFP帮助的说法):
2018-04-20 15:12
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 2楼 吹水佬
那先生我现在的计算结果还不到16位啊
2018-04-20 15:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
10193765441144039
10193765441144041
12345678901234567 是17位
2018-04-20 15:38
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 2楼 吹水佬
哦,最后结果是不到16位,而中间过程中倒是达到17位的,那vfp的运算最多位只能是不超16位吗,这样不是太遗憾了吗(这款软件有缺陷了)
2018-04-20 15:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用fdxxhjc在2018-4-20 15:38:52的发言:

哦,最后结果是不到16位,而中间过程中倒是达到17位的,那vfp的运算最多位只能是不超16位吗,这样不是太遗憾了吗(这款软件有缺陷了)

也不算是什么“缺陷”,超算也是有限的。
可以用数字串来表达,模拟算式运算来处理简单的大数运算。
2018-04-20 15:43
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 6楼 吹水佬
那请教先生在我的困惑中想得到精确的结果要如何修改代码才可,谢谢先生指导
2018-04-20 15:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 7楼 fdxxhjc
参考6楼
2018-04-20 16:43
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 8楼 吹水佬
先生您这个6楼的文字说明到代码我不会了,请先生指教,谢谢先生了
2018-04-21 11:46
井绳
Rank: 2
等 级:论坛游民
帖 子:96
专家分:69
注 册:2010-6-29
得分:0 
100964179=100000000+964179
所以100964179*100964179=(100000000+964179)*(100000000+964179)
以下分解因式应该没问题
其中100000000*100000000无须计算,用0的个数串接
2*100000000*964179是在2*964179后面串接0
964179*964179在VFP能力之内
不知道这是不是吹水版主的意思?

[此贴子已经被作者于2018-4-21 13:34编辑过]

2018-04-21 13:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486220-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018909 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved