php正弦、余弦工作异常
我在PHP中试验php正弦、余弦工作异常,php,math,Php,Math,我在PHP中试验sin和cos函数,我注意到这段代码: echo rad2deg(sin(deg2rad(pi()))); pi返回。但是,该代码: echo asin(sin(pi())); 你会认为它会在π附近给出(取正弦的逆正弦),实际上会返回: 1.2246467991474E-16 我通读了关于sines之类的PHP手册,但我仍然不明白为什么会这样,以及它是如何工作的 有人知道这是怎么回事吗?0度、180度(π弧度)、360度(2*π弧度)等的窦道都是0 因此,取结果(0)的反正
sin
和cos
函数,我注意到这段代码:
echo rad2deg(sin(deg2rad(pi())));
pi返回。但是,该代码:
echo asin(sin(pi()));
你会认为它会在π附近给出(取正弦的逆正弦),实际上会返回:
1.2246467991474E-16
我通读了关于sines之类的PHP手册,但我仍然不明白为什么会这样,以及它是如何工作的
有人知道这是怎么回事吗?0度、180度(π弧度)、360度(2*π弧度)等的窦道都是
0
因此,取结果(0)的反正弦将返回0
编辑:这是一个数学问题:从0到360度(0-2*pi弧度),窦会在-1到1之间波动。并且,您可以获取的任何有效数字的arcin值(介于-1和1之间…)将始终返回一个介于-0.5*pi和0.5*pi之间的数字。所以它永远不可能是π
参见一个简单的例子。0度、180度(π弧度)、360度(2*π弧度)等的窦都是
0
因此,取结果(0)的反正弦将返回0
编辑:这是一个数学问题:从0到360度(0-2*pi弧度),窦会在-1到1之间波动。并且,您可以获取的任何有效数字的arcin值(介于-1和1之间…)将始终返回一个介于-0.5*pi和0.5*pi之间的数字。所以它永远不可能是π
请看一个简单的例子。作为sin(x)=x+O(x^3)
,对于小因子e
和中等大小的参数x
,您可以得到它
1/e*sin(e*x) = x + O(e^2*x^3)
从度到弧度的转换系数pi/180可以计算得足够小,以便高阶项不会对第一个数字产生太大的影响。但是在任何情况下,你的第一个实验的结果都不是精确的pi
作为sin(x)=x+O(x^3)
,对于小因子e
和中等大小的参数x
,你得到了
1/e*sin(e*x) = x + O(e^2*x^3)
从度到弧度的转换系数pi/180可以计算得足够小,以便高阶项不会对第一个数字产生太大的影响。但是,在任何情况下,你的第一个实验的结果都不能精确地计算出你的第一个函数
180/pi*sin(pi*pi/180)
这与π“接近”(对于两位数),因为pi*pi/180
相对较小,对于较小的值,sin(x)约为x
对于第二个代码段,应该知道pi()
不能返回精确的pi数,但只能返回一个精确到53位的二进制数字。
事实上,如果你(以更高的精度)计算eps=frac(pi*2^52)/2^52,你会得到大约1.2246467991474E-16,所以
sin(pi())=sin(pi-eps)=-sin(-eps)=sin(eps)~=eps
。当然,asin
无法猜测哪个是传递给sin
的原始值,因此它将始终返回一个介于-pi/2和+pi/2之间的值 您的第一个函数将实际计算
180/pi*sin(pi*pi/180)
这与π“接近”(对于两位数),因为pi*pi/180
相对较小,对于较小的值,sin(x)约为x
对于第二个代码段,应该知道pi()
不能返回精确的pi数,但只能返回一个精确到53位的二进制数字。
事实上,如果你(以更高的精度)计算eps=frac(pi*2^52)/2^52,你会得到大约1.2246467991474E-16,所以
sin(pi())=sin(pi-eps)=-sin(-eps)=sin(eps)~=eps
。当然,asin
无法猜测哪个是传递给sin
的原始值,因此它将始终返回一个介于-pi/2和+pi/2之间的值 已确认pi的sin的弧心为零:。产生的小值可能是由于浮点错误。不应在pi()
上使用deg2rad
(除非要将3.141…度转换为弧度)。已确认pi的sin的弧长为零:。产生的小值可能是由于浮点错误。您不应该在pi()
上使用deg2rad
(除非您想将3.141…度转换为弧度)。这与其说是数学方面的问题,不如说是PHP方面的问题。我知道π的任意倍数的正弦是0。我在问为什么我的PHP没有返回这个数字。如果我有一个数字x
,并取它的正弦,那么我应该使用什么函数来返回这个数字,或者接近这个数字的数字?例如,如果我给函数4的正弦值,它将返回3.9。这与它的数学方面无关,而与PHP方面有关。我知道π的任意倍数的正弦是0。我在问为什么我的PHP没有返回这个数字。如果我有一个数字x
,并取它的正弦,那么我应该使用什么函数来返回这个数字,或者接近这个数字的数字?例如,如果我给函数4的正弦,它会给我3.9。