php计算2的10次方和7的3次方,手算开2、3次方的公式验证

目前来看,以下算法开2次方能在百分之2以内的精度,开3次方能在百分之6以内的精度,而且误差主要出在20以内。200以上则是千分位误差

`

using System;

using System.Collections.Generic; using System.Linq; using System.Text;

namespace KaiFangTest { class Program { static void Main(string[] args) { for (int i = 4; i <= 100000; i++) { float i2 = get2(i); //i2 = (float)Math.Truncate((double)i210)/10; //i2 = (i2 + i / i2 ) / 2; float wuCha = Math.Abs(((i2 * i2) - i) / i); if (Math.Abs(wuCha) > 0.01) System.Console.WriteLine(i.ToString() + " " + i2.ToString("N2") + " " + (wuCha).ToString("N4")); } System.Console.WriteLine("*******"); for (int i = 8; i <= 10000; i++) { float i3 = get3(i); //i3 = (float)Math.Truncate((double)i310)/10; //i3 = (2 * i3 + i / i3 / i3) / 3; float wuCha = Math.Abs((( i3 i3 * i3) - i) / i); if (wuCha > 0.1) System.Console.WriteLine(i.ToString() + " " + i3.ToString("N3") + " " + (wuCha).ToString("N4")); }

//for (int i = 2; i < 100; i++)

// System.Console.WriteLine(i.ToString() + " " + find2(i));

}

static float get2(int t)

{

float a = find2(t);

return (a + t / a) / 2;

}

static float find2(int t)

{

for (int i = 0; i < t; i++)

if (i * i == t)

return i;

else

if (i * i > t)

{

int small = i - 1;

int result =i;

if ( (result * result - t) != Math.Min(result * result - t, t - small * small))

result = small;

float misus = (i * i - t) / (t - small * small );

if (misus > 0.5 && misus < 2)

return (float)(small + 0.5);

return result;

}

return 0;

}

static float get3(float t)

{

float a = find3(t);

return (a*2 + t / a/a) / 3;

}

static float find3(float t)

{

for (int i = 0; i < t; i++)

if (i * i*i == t)

return i;

else if (i * i*i > t)

{

int small = i - 1;

int result = i;

if ((result * result * result - t) != Math.Min(result * result * result - t, t - small* small * small))

result = small;

float misus = (i*i*i-t)/(t - small* small * small);

if (misus > 0.3 && misus < 3)

return (float)(small + 0.5);

return result;

}

return 0;

}

}

} `

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值