php正弦,余弦工作奇怪

时间:2016-12-29 19:31:23

标签: php math

我正在尝试PHP中的sincos函数,我注意到这段代码:

echo rad2deg(sin(deg2rad(pi())));

返回pi。但是,这段代码:

echo asin(sin(pi()));

你认为它会给pi附近的某个地方(取正弦的反正弦值)实际上会返回:

1.2246467991474E-16

我阅读了有关正弦等的PHP手册,但我仍然无法弄清楚为什么这样做会起作用以及它是如何工作的。

有谁知道这应该如何运作?

3 个答案:

答案 0 :(得分:0)

0度,180度(pi弧度),360度(2 * pi弧度)等的窦都是0

因此,取结果(0)的arcsin会让你function getFormatter(digits) { var notations = [ // { value: 1E12, suffix: "T" }, what you'll use for trillion? { value: 1E9, suffix: "B" }, { value: 1E6, suffix: "M" }, { value: 1E3, suffix: "T" } ] rx = /\.0+$|(\.[0-9]*[1-9])0+$/ return function(num) { var notation for (var i = 0; i < notations.length; i++) { notation = notations[i] if (num >= notation.value) { var value = num / notation.value value = value.toFixed(digits) value = value.replace(rx, "$1") return value + notation.suffix } } } } var numbers = [ 20000000000, 160020, 18200000 ] d3.select('body') .append('ul') .selectAll('li') .data(numbers) .enter() .append('li') .text(getFormatter(2))回来。

编辑 关于数学:从0到360度(0 - 2 * pi弧度),窦将在-1和1之间波动。任何有效数字的arcsin值你可以取arcsin(在-1和1 ......之间)将始终返回-0.5 * pi和0.5 * pi之间的数字。所以它永远不会是pi。

请参阅一个简单示例here

答案 1 :(得分:0)

作为sin(x)=x+O(x^3),对于小因子e和中等大小的参数x,您可以得到

1/e*sin(e*x) = x + O(e^2*x^3)

从度数到弧度的转换因子pi/180可以计算得足够小,以便高阶项不会过多地影响第一个数字。但在任何情况下,您的第一个实验的结果都不是pi

答案 2 :(得分:0)

你的第一个函数实际上会计算

pi*pi/180

&#34;关闭&#34;到pi(两位数),因为pi()相对较小,而对于小值,sin(x)大约为x。

对于您的第二个代码段,应该知道eps=frac(pi*2^52)/2^52无法返回精确数量的pi,但只能返回一个精确到53的二进制数字。 事实上,如果你计算(精度更高)sin(pi())=sin(pi-eps)=-sin(-eps)=sin(eps) ~= eps,你会得到大约1.2246467991474E-16。,所以asin。当然,sin无法猜出哪个是传递给if request.user.is_authenticated: # Do something for authenticated users. ... else: # Do something for anonymous users. ... 的原始值,因此它始终会返回介于-pi / 2和+ pi / 2之间的值。