C 当值超过内存阈值时,会产生扭曲的结果

C 当值超过内存阈值时,会产生扭曲的结果,c,memory,C,Memory,N.b.以下代码是在不使用库的情况下故意编写的 N.b.1我之前发布了关于此代码的另一个问题,但涵盖了另一个问题。这是另一个问题: 要计算近似值,请执行以下操作: 我需要使用以下公式: 我只是写了下面的代码来实现这一点 但是,我发现当我尝试使用k的大值时,我开始得到不准确的结果。例如,当插入x=2和k>=40以获取e^-2的值时,我看不到正确的结果,但是关于第一个问题: 是的,long double可以提高准确性,但也有其局限性。因此,如果您需要更高的精度,您必须实现自己的数据类型。。。(如

N.b.以下代码是在不使用库的情况下故意编写的

N.b.1我之前发布了关于此代码的另一个问题,但涵盖了另一个问题。这是另一个问题:

要计算近似值,请执行以下操作:

我需要使用以下公式:

我只是写了下面的代码来实现这一点


但是,我发现当我尝试使用
k
的大值时,我开始得到不准确的结果。例如,当插入
x=2
k>=40
以获取
e^-2的值时,我看不到正确的结果,但是关于第一个问题:

是的,
long double
可以提高准确性,但也有其局限性。因此,如果您需要更高的精度,您必须实现自己的数据类型。。。(如评论中所述)

第二个问题 您可以在
limits.h

#include <limits.h>
printf("The minimum value of LONG = %ld\n", LONG_MIN);
printf("The maximum value of LONG = %ld\n", LONG_MAX);

#包括
printf(“LONG=%ld\n”的最小值,LONG\u MIN);
printf(“LONG=%ld\n”的最大值,LONG\u MAX);

使用数组,并滚动您自己的浮点运算(这样,只要您有足够的内存,您就可以达到您想要的任何精度)警告:非常慢回答您的问题吗@jwdonahue似乎不是一个复制品。你提到的一个是关于没有返回正确的值,而这个是关于不够精确。它们是完全不同的问题,有完全不同的解决方案考虑a,它可以给你你所需要的精度。计算级数的正确方法是a)递增计算项,B)从最小的项开始添加项。递增意味着如果您知道术语[k]
,则
术语[k+1]=术语[k]*(-x)/(k+1)
。从最小到最大的相加意味着将这些项存储在一个数组中,直到计算出最小项为止。谢谢@lx76。那肯定会对我有帮助的!:-)
#include <limits.h>
printf("The minimum value of LONG = %ld\n", LONG_MIN);
printf("The maximum value of LONG = %ld\n", LONG_MAX);