.Net 的数学库计算精度太差??

westour 2014-01-15 04:18:49
在程序中要计算一个 很小的数 的指数,即 Math.Exp(x)

其中 x 非常小。结果发现居然计算出来的结果是错的。

用 vc 2010验证了一下,也是错的。

在 vc6 下面计算,得到了正确的结果。

怎么微软的库的精度越来越差?

有兴趣的同学可以自己试一下。

我要实际计算的公式是 (1- Math.Exp(0-x) ) /x , 在 x趋于0的时候,这个公式的结果应该趋于1,但是始终应该小于1 ,我在C#里面计算,居然出现了大于1的情况,所以开始检查,最终发现是 Math.Exp计算结果精度太差,比windows自己带的计算器还差。

我发现这个问题的时候,使用的x的值是 0.0000000000022861307294881892

请高手验证一下,并求高精度的库函数。

用 vs2010 c#和c++得到的结果都大于1,在vc6下面计算的结果小于1.
...全文
331 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
westour 2014-01-21
  • 打赏
  • 举报
回复
忘记指出了 x是从正的方向趋于0,所以不要考虑x小于0的情况。
引用 2 楼 tangyanzhi1111 的回复:
当x=1的时候(趋于0)0.6几,当x=-1的时候(趋于0)就大于1 了 MessageBox.Show(((1 - Math.Exp(0 - Convert.ToInt32(TxtMath.Text))) /Convert.ToInt32(TxtMath.Text)).ToString());
Regan-lin 2014-01-21
  • 打赏
  • 举报
回复
Math.Exp(x)这里的x取的好像是double,你写那么长的测试数据做什么,0.0000000000022861307294881892这都多少位了
devmiao 2014-01-15
  • 打赏
  • 举报
回复
你可以自己实现一个更高精度的Exp,如果你对性能没有要求的话。 方法是级数展开去迭代。数值计算书上有的。
emailtome 2014-01-15
  • 打赏
  • 举报
回复
MKL in your C# program http://software.intel.com/en-us/articles/using-intel-mkl-in-your-c-program/
江湖评谈 2014-01-15
  • 打赏
  • 举报
回复
当x=1的时候(趋于0)0.6几,当x=-1的时候(趋于0)就大于1 了 MessageBox.Show(((1 - Math.Exp(0 - Convert.ToInt32(TxtMath.Text))) /Convert.ToInt32(TxtMath.Text)).ToString());
石灰石石英石 2014-01-15
  • 打赏
  • 举报
回复
需要计算精度要使用decimal,float和double的精度在计算上是不能得到很好地保证,而decimal的精度虽然没有double大,但是在计算的时候会保护!

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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