2016-08-26 23 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);