[高手请进]-疑似算法精度的问题-梁哥 影子 石头等等 都快来吧

feixianxxx 2009-06-25 09:30:43
加精
昨天有个朋友发的一个贴 求解
59(X + X平方 + X立方 + X四次方 + X五次方)+1250*X五次方=1000 求解X
我用2分查找的思路做了下来
-- =========================================
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================

create function f_pk(@n float)/*这个函数用来返回59*(@mid + power(@mid,2) + power(@mid,3) + power(@mid,4) + power(@mid,5))+1250* power(@mid,5)每次算出来的值*/
returns float
as
begin
declare @mid float
set @mid=@n
return 59*(@mid + power(@mid,2) + power(@mid,3) + power(@mid,4) + power(@mid,5))+1250* power(@mid,5)
end
go
declare @n1 float, @n2 float, @mid float--实现2分查找(具体算法不说了)
set @n1=0/*答案一定在0和1之间 具体我已经在http://topic.csdn.net/u/20090624/21/e1a1bba4-3190-4908-aa8f-4f564693109d.html分析过了*/
set @n2=1
while (@n1< @n2)
begin
set @mid=(@n1+@n2)/2
print dbo.f_pk(@mid)--调用函数,便于观察运行情况
if( 59*(@mid + power(@mid,2) + power(@mid,3) + power(@mid,4) + power(@mid,5))+1250* power(@mid,5)=1000)
break;
if(59*(@mid + power(@mid,2) + power(@mid,3) + power(@mid,4) + power(@mid,5))+1250* power(@mid,5)<1000)
set @n1=@mid + 0.0001;
else
set @n2=@mid - 0.0001;
end
print @mid--输出答案
/*
96.2188
431.749
842.627
1149.82
986.198
1065.38
1025.14
1005.51
995.816
1000.65
998.233
999.443
1000.05
0.909139/*--这个是最后X的值,上面的值是f_pk函数返回的值,可以看到最后判断到1000.05的时候跳出*/

*/

问题来了:
我把0.909139 放于计算式进行检验 发现
59(X + X平方 + X立方 + X四次方 + X五次方)+1250*X五次方=1300多
误差这么大 到底什么原因
我也试过将 @n1 float, @n2 float, @mid float都变成 decimal类型的 都差不多
这个是不是SQL SERVER的一个精度缺失问题
我试过用C语言的方法进行同样得到方法(一模一样)但是答案确非常接近~~
高手不要在潜水 都来吧~



...全文
297 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
DSICY 2012-09-25
  • 打赏
  • 举报
回复
[mark]
ZspringS 2009-06-30
  • 打赏
  • 举报
回复
不太懂……
Teng_s2000 2009-06-30
  • 打赏
  • 举报
回复
Studying
Yhzhtk 2009-06-29
  • 打赏
  • 举报
回复
看看 学习中!
wpy110521 2009-06-29
  • 打赏
  • 举报
回复
是不是受到位数的限制呢.不得而知.
changbaolong 2009-06-28
  • 打赏
  • 举报
回复
刚到
古今多少事 2009-06-28
  • 打赏
  • 举报
回复
晕!才发现已经结了……
古今多少事 2009-06-28
  • 打赏
  • 举报
回复
唉!最近正在为数据类型的精度烦恼……
楼上的人好多啊,期待有个正确的总结……
yijianpiao235 2009-06-27
  • 打赏
  • 举报
回复
学习
Sou2012 2009-06-27
  • 打赏
  • 举报
回复
MARK!!
phisherr 2009-06-27
  • 打赏
  • 举报
回复
mark
changrong520lmd 2009-06-26
  • 打赏
  • 举报
回复
dtrfgm cvyhg
feixianxxx 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 fredrickhu 的回复:]
引用 35 楼 feixianxxx 的回复:
引用 33 楼 winstonbonaparte 的回复:
Delphi(Pascal) code
var
num: Currency;
begin
num := 0.909139;
Edit1.Text := FloatToStr(59*(num + power(num,2) + power(num,3) + power(num,4) + power(num,5))+1250* power(num,5));

/*
结果显示为:999.853166683984
*/


很不好意思的问句 你这个是什么语言。。



Delphi
[/Quote]

奥 呵呵 难为情的 我都不知道 就听过名字~
--小F-- 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 feixianxxx 的回复:]
引用 33 楼 winstonbonaparte 的回复:
Delphi(Pascal) code
var
num: Currency;
begin
num := 0.909139;
Edit1.Text := FloatToStr(59*(num + power(num,2) + power(num,3) + power(num,4) + power(num,5))+1250* power(num,5));

/*
结果显示为:999.853166683984
*/


很不好意思的问句 你这个是什么语言。。
[/Quote]

Delphi
feixianxxx 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 winstonbonaparte 的回复:]
Delphi(Pascal) code
var
num: Currency;
begin
num := 0.909139;
Edit1.Text := FloatToStr(59*(num + power(num,2) + power(num,3) + power(num,4) + power(num,5))+1250* power(num,5));

/*
结果显示为:999.853166683984
*/
[/Quote]
很不好意思的问句 你这个是什么语言。。
winstonbonaparte 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 winstonbonaparte 的回复:]
Delphi(Pascal) code
var
num: Currency;
begin
num := 0.909139;
Edit1.Text := FloatToStr(59*(num + power(num,2) + power(num,3) + power(num,4) + power(num,5))+1250* power(num,5));

/*
结果显示为:999.853166683984
*/
[/Quote]
我用给这个值赋了0.909129,0.909129599424196 结果还是一样的999.853166683984
winstonbonaparte 2009-06-25
  • 打赏
  • 举报
回复

var
num: Currency;
begin
num := 0.909139;
Edit1.Text := FloatToStr(59*(num + power(num,2) + power(num,3) + power(num,4) + power(num,5))+1250* power(num,5));

/*
结果显示为:999.853166683984
*/
cht_1988 2009-06-25
  • 打赏
  • 举报
回复
不错来看看
Alfredknox 2009-06-25
  • 打赏
  • 举报
回复
我看你上面貼的結果,SQL 二分算出來的是 0.909139,
而迭代是0.909129599424196
刚好1000
flairsky 2009-06-25
  • 打赏
  • 举报
回复
都需要强制转换到高一级的精度
加载更多回复(43)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧