1
我想玩弄程序上的內容生成算法,並決定開始與噪聲(培林,價值等)在Python從C代碼實現噪音的功能
對於這一點,我想有一個通用的n維噪音功能。爲此,我寫了一個函數,返回給定尺寸的噪聲生成函數:
small_primes = [1, 83, 97, 233, 61, 127]
def get_noise_function(dimension, random_seed=None):
primes_list = list(small_primes)
if dimension > len(primes_list):
primes_list = primes_list * (dimension/len(primes_list))
rand = random.Random()
if random_seed:
rand.seed(random_seed)
# random.shuffle(primes_list)
rand.shuffle(primes_list)
def noise_func(*args):
if len(args) < dimension:
# throw something
return None
n = [a*b for a, b in zip(args, primes_list)]
n = sum(n)
#n = (n << 13) ** n
n = (n << 13)^n
nn = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff
return 1.0 - (nn/1073741824.0)
return noise_func
我相信問題在於計算。我根據我的這兩篇文章代碼:
例子:
f1 = get_noise_function(1, 10)
print f1(1)
print f1(2)
print f1(3)
print f1(1)
它總是返回 - 0.281790983863,即使在更高的尺寸和不同的種子。
問題是,我相信,在C/C++中有溢出是一些計算,並且一切正常。在Python中,它只是計算一個巨大的數字。
我該如何糾正這種情況,或者如果可能的話,如何生成一個僞隨機函數,該函數在播種後對於某個輸入總是返回相同的值。
[編輯]修正了代碼。現在它可以工作。
是的,就是這樣。讀了這麼多的數學後,我認爲這是冪指數。我修復了另一個錯誤(一個錯字),現在它工作。另外,聖潔的廢話!蒂姆彼得斯回答了我的問題! –