22,209
社区成员
发帖
与我相关
我的任务
分享
-- =========================================
-- -----------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的时候跳出*/
*/
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
*/