logsumexp
işlevini sağlayan açık kaynaklı sayısal C kitaplığından herhangi biri var mı?logsumexp uygulaması?
logsumexp(a)
işlevi, dizinin a bileşenlerinin üstel adlarının toplamını (e^{a_1} + ... e^{a_n}) toplayarak sayısal taşmayı önler.
logsumexp
işlevini sağlayan açık kaynaklı sayısal C kitaplığından herhangi biri var mı?logsumexp uygulaması?
logsumexp(a)
işlevi, dizinin a bileşenlerinin üstel adlarının toplamını (e^{a_1} + ... e^{a_n}) toplayarak sayısal taşmayı önler.
Burada sıfırdan çok basit uygulama (test edilen en az minimal,) var:
Bu uçta geri etkili bir daha sonra günlüğünü ekleyerek, büyük iddiaların hepsi bölünmesi hile yokdouble logsumexp(double nums[], size_t ct) {
double max_exp = nums[0], sum = 0.0;
size_t i;
for (i = 1 ; i < ct ; i++)
if (nums[i] > max_exp)
max_exp = nums[i];
for (i = 0; i < ct ; i++)
sum += exp(nums[i] - max_exp);
return log(sum) + max_exp;
}
taşmayı önlemek için, bazı argümanların diğerlerinden daha büyük büyüklükteki emirleri olması durumunda, sürünen hatalarla birlikte, benzer şekilde ölçeklendirilmiş çok sayıda değer eklenmesi iyi bir davranışdır. Eğer 0 argümanlar verildiğinde çarpmadan çalıştırmak istiyorsanız
, bunun için bir durumda eklemek gerekecek :)
Shame on you Hobbs. 'Size_t' işini yapmak için bir int kullanmaktan daha iyi bilmelisiniz. –
Suçlu olarak ücretlendirildi. C benim için bir hobi haline geldi. Onu tamir edeceğim. – hobbs