你好,
我在 JMP 中遇到一個奇怪的問題,我似乎無法解釋。 在我的表中,我正在比較兩列中的值。 列“A”只是一個簡單的連續數字列,其整數值範圍為 0-100。 列“B”是另一個簡單的連續數字列,數字範圍為 0 - 1,所有精度均達到小數點後兩位。 然後,我創建一個列“C”,通過在“C”中設置公式:B*100 來直接比較“A”和“B”。 然而,當我比較列“A”和“C”時,在少數情況下,A 和 C 確實相等,但 JMP 說它們不相等。 這應該是一個簡單的比較,但由於某種原因某些數字不具有可比性。 將“C”列更改為字符,然後返回數字可以解決此問題,但我覺得我實際上不必這樣做......任何人都可以解釋一下根本問題嗎?
我附上了一個示例數據集,其中列出了所有可能的數字。 您可以看到問題出現在第 7、14、28、29、55、56、57 和 58 行。
如果有任何見解,我將不勝感激。
謝謝你,
梅麗莎
問題在於浮點數/二進制數。並非所有數字都可以精確保存為精確輸入。這是計算機的長期事實之一。JMP 將其數值數據存儲在該公式中,然後在顯示時將其修正回修正值。這是幾乎所有執行數值分析的系統都會遇到的問題。
如果我記得……很久以前,我相信數字 3 無法被存儲,而實際上被存儲為類似 2.9999999999998 的東西。我對數字 3 的理解可能是錯誤的,但我希望你能明白。
@梅利薩奇,
您可以嘗試編寫表格腳本,而不是複制數據或手動輸入數據嗎?
這是一個例子。 我無法找出生成一系列小數的簡單方法。 但如果你要做這樣的事情,我認為你會避免舍入的問題。
dt = New Table();
Set1 = Index(1,100);
Set2 = Index(0.01,1); // This doesn't work
dt << New Column("A",Format("Fixed Decimal",10,2),Numeric,Continuous,<< Set Values(Set1))
<< New Column("B",Format("Fixed Decimal",10,2),Numeric,Continuous,<< Set Values(Set2))// Will Fail
<< New Column("B*100",Format("Fixed Decimal",10,2),Numeric,Continuous,Formula(:B*100))
<< New Column("Check1",Format("Fixed Decimal",10,2),Numeric,Continuous,Formula(:A == :Name("B*100")));你好@uday_guntupalli
非常感謝您的回复。 我應該看看差異,發現這是一個舍入問題。 知道為什麼 JMP 會產生這些微小的差異嗎? 我手動輸入這些數字,因此不應該有任何進一步的小數/精度。
@梅利薩奇,
這是一個舍入誤差問題。 如果您看到我附加的數據表,我添加了一個新列,其中計算了兩列之間的差異。 有一個很小的值,這就是 JMP 返回不相等的原因。
希望這可以幫助