我想運行具有周期性邊界條件的粒子模擬 - 爲簡單起見,我們假設一個長度爲1.0
的區域的1D模擬。我可以使用下面的一小段執行這些條件:在Java中執行週期性邊界條件的最快方法
if (x > 1.0)
x -= 1.0;
if (x < 0.0)
x += 1.0;
但感覺「笨拙」 - 推廣這一較高的尺寸時尤其如此。我試圖做類似
x = x % 1.0;
這需要的情況下x > 1.0
照顧得很好,但不會做什麼,我想爲x < 0.0
。的「模量」版本和「手動」版本輸出的幾個例子以示區別:
Value: 1.896440, mod: 0.896440, manual: 0.896440
Value: -0.449115, mod: -0.449115, manual: 0.550885
Value: 1.355568, mod: 0.355568, manual: 0.355568
Value: -0.421918, mod: -0.421918, manual: 0.578082
)對於我目前的應用中,「笨拙」的方法可能是夠好了。但是爲了成爲一名更好的程序員,我仍然想知道是否有一種「更好」(或者至少看起來更好看)的方式來做到這一點。
)是的,我讀過this post,所以我知道爲什麼我想要的東西它不會做,那它不應該。我的問題不是關於這個問題,而是關於如何去做。
是否有一個原因,只是把'if/else'放在一個方法中,可能被一個帶有指定邊界的字段的類所包裹,如果這是一個參數,是不可行的? – chrylis
@chrylis:這絕對是一個更好的方法 - 但它仍然感覺有點笨拙。另外,雖然這次我沒有特別需要它,但很高興知道在高性能應用程序中使用這種分支機制的方法。 –