2016-08-26 19 views
-3

作为一个谜,我给下面的代码片段昨天的问题这个混淆代码中是否存在浮点错误?

为什么会出现这种给予773.06 ..?

var _ = 10, __ = 21, ___ = 38; 
 
var _______ = { _: { "yo":_/___*_+___ }}; 
 
var ___________ = [[[{"heh":{"hehe":[[[[12,71,82,91]]]][0][0][0][1]}}]]]; 
 
var ____________ = ___________[0][0][0].heh.hehe*_+__+_______._.yo/_+___; 
 
console.log(____________);

我不记得了预期的答案,但它至少是800的一个同事看了一下简要并表示它的浮点不精确是由于,但我认为它应该回报773.06 ..

什么是正确答案?

整理代码

var a = 10, b = 21, c = 38; 
 
var d = a/c*a+c; 
 
var e = (71*a)+b+(d/a)+c; 
 
console.log(e);

+2

会,如果你改变从'_'所有的变量名大大有助于人们'A,B,C'或可读性 –

+1

类似这段代码高尔夫? – Liam

+1

似乎孩子们正在键盘上玩 –

回答

3

我们只是删除了膨胀,并给这个事几可读的变量名:

//translated line by line 
var a = 10, b = 21, c = 38; 
var d = a/c*a + c; 
//d = 100/38 + 38 
//d = 40.63157894736842 
var e = [12,71,82,91][1]; 
//e = 71; 
var f = e*a + b + d/a + c; 
//f = 710 + 21 + 4.xxx + 38 
//f = 773.0631578947368 
console.log(f); 
+0

只是为了确认它https://jsfiddle.net/nn9p92u0/ – Liam

2

最后一行是等价于: 71*10+21+(10/38*10+38)/10+38这是773.06 ...

你可以得到809.63157894,如果你忘记a

划分 d
2

居然没有任何错误。这是故意混淆,但如果你简化你得到如下:

var A = 10; 
var B = 21; 
var C = 38; 
var D = { A: { "yo": A/C * A + C }}; 
var E = [[[{"heh":{"hehe":[[[[12, 71, 82, 91]]]][0][0][0][1]}}]]]; 
var F = E[0][0][0].heh.hehe * A + B + D.A.yo/A + C; 
console.log(F); 

,然后就变成了:

var D = 10/38 * 10 + 38; 
var E = [[[[12, 71, 82, 91]]]][0][0][0][1]; 
var F = E * 10 + 21 + D/10 + 38; 
console.log(F); 

,然后就变成了:

var D = 10/38 * 10 + 38; 
var F = 71 * 10 + 21 + D/10 + 38; 
console.log(F); 

,然后就变成了:

var F = 769 + (100/38 + 38)/10; 
console.log(F); 

其中t母鸡变成:

console.log(769 + 3.8 + 10/38);