我正在尝试PHP中的sin
和cos
函数,我注意到这段代码:
echo rad2deg(sin(deg2rad(pi())));
返回pi。但是,这段代码:
echo asin(sin(pi()));
你认为它会给pi附近的某个地方(取正弦的反正弦值)实际上会返回:
1.2246467991474E-16
我阅读了有关正弦等的PHP手册,但我仍然无法弄清楚为什么这样做会起作用以及它是如何工作的。
有谁知道这应该如何运作?
答案 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之间的值。