Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php正弦、余弦工作异常_Php_Math - Fatal编程技术网

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)的反正

我在PHP中试验
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。