These are chat archives for bluescarni/pagmo_reborn

23rd
Jun 2016
Francesco Biscani
@bluescarni
Jun 23 2016 09:30
yesterday evening I managed to write a compile-time sieve of Eratosthenes. Was a nice exercise in constexpr calculations
Dario Izzo
@darioizzo
Jun 23 2016 09:30
whats Eratosthenes
?
Francesco Biscani
@bluescarni
Jun 23 2016 09:31
https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes it's a method to find prime numbers
Dario Izzo
@darioizzo
Jun 23 2016 09:31
ah the elimination one?
Francesco Biscani
@bluescarni
Jun 23 2016 09:31
basically it could replace the hard-coded primes table pagmo has now
Dario Izzo
@darioizzo
Jun 23 2016 09:32
yep, we spoke about it ... I think
show me the code .... show me
Francesco Biscani
@bluescarni
Jun 23 2016 09:32
it's on my pc at home, I can past it in a gist tonight
it works up to something like n = 20000, then there's a compiler recursion error
constexpr auto primes_table = generate_primes<1000>(); will return a compile-time array of all the primes <= 1000
but it's a curiosity, not sure I'd actually use it... clang compiles it fast, but with GCC there's a noticeable performance impact and memory usage spike
Dario Izzo
@darioizzo
Jun 23 2016 09:50
1) I am curious to see the code
2) you have too much free time :)
Dario Izzo
@darioizzo
Jun 23 2016 10:01
    // The binomial coefficient as implemented using gamma functions
template <typename T>
T binomial_coefficient(T n, T k)
{
return static_cast<T>(std::tgamma(n + 1.) / std::tgamma(k + 1.) / std::tgamma(n - k + 1.));
}
prima che mi linci online ....
I implemented it like this .... how bad is it?
Francesco Biscani
@bluescarni
Jun 23 2016 10:02
it will not be very precise, and I don't understand the static cast. It's supposed to be called with floating point arguments?
Dario Izzo
@darioizzo
Jun 23 2016 10:03
maybe in the future ... ? I can assume the type will be vector_double::size_type, but then would the factorial version not be a better impl?
Francesco Biscani
@bluescarni
Jun 23 2016 10:04
you will get bad results with this implementation if you want to apply it to integral values, as the tgamma does not necessarily gives you integral values for integralinputs
it could give you something like 3.9999999, then when you do the static cast you lose the decimal part
Dario Izzo
@darioizzo
Jun 23 2016 10:05
I know thats why i casted
ah right the cast just discards the decimals
Francesco Biscani
@bluescarni
Jun 23 2016 10:06
you can do the implementation with factorials, but it will very soon overflow if you use it with integral values
it does not take big values to overflow with the factorial'
Dario Izzo
@darioizzo
Jun 23 2016 10:06
so I compute with the gamma and then round?
Francesco Biscani
@bluescarni
Jun 23 2016 10:07
you need the result to be an integer?
Dario Izzo
@darioizzo
Jun 23 2016 10:08
I can work with a double, then I would need to make later comparisons with a tol I guess
while(binomial_coefficient(H + n_f - 1u, n_f - 1u) <= n_w)
this I could write as:
while(binomial_coefficient(H + n_f - 1u, n_f - 1u) - n_w < 1e-8)
Francesco Biscani
@bluescarni
Jun 23 2016 10:09
I can't remember precisely, but I think that it might be possible to compute the binomial coefficient by an iterative formula that avoids having big intermediate values
Dario Izzo
@darioizzo
Jun 23 2016 10:09
ok I will look for alt algos
you still need to be careful with overflows
lol I am the background for an interview
Dario Izzo
@darioizzo
Jun 23 2016 10:14
? like ?
Francesco Biscani
@bluescarni
Jun 23 2016 10:14
they are interviewing the big professor here, and the journalist guy asked me if it is ok to have me in the background while I work
Dario Izzo
@darioizzo
Jun 23 2016 10:14
make a smart face
Francesco Biscani
@bluescarni
Jun 23 2016 10:14
"It iz nice to haf someone vorking in ze background"
shuold I start masturbating
Dario Izzo
@darioizzo
Jun 23 2016 10:15
and then lick the fingers
Francesco Biscani
@bluescarni
Jun 23 2016 10:15
I just wanted to have my lunch while watching youtube
Dario Izzo
@darioizzo
Jun 23 2016 10:16
Iz dat alloud?
Francesco Biscani
@bluescarni
Jun 23 2016 10:16
das ist VERBOTEN
during the interview anyway
but I regularly skip lunches with ze ozers
can't be arsed to walk all the way to the canteen
Dario Izzo
@darioizzo
Jun 23 2016 10:17
Francesco Biscani
@bluescarni
Jun 23 2016 10:17
exactly!
Dario Izzo
@darioizzo
Jun 23 2016 10:17
print it and put it there
Francesco Biscani
@bluescarni
Jun 23 2016 10:17
I should wear a mask... like mr robot
Dario Izzo
@darioizzo
Jun 23 2016 10:17
you can also mechanise some movement Fantozzi style
Francesco Biscani
@bluescarni
Jun 23 2016 10:17
that would be awesome :) like stumbling spectacularly in the pc's cable
dragging the screens and the telehone to the ground
Dario Izzo
@darioizzo
Jun 23 2016 10:21
Francesco Biscani
@bluescarni
Jun 23 2016 10:30
sveglia e cafee'
barba e bide'
Francesco Biscani
@bluescarni
Jun 23 2016 11:16
someone is going swimming apparently
Dario Izzo
@darioizzo
Jun 23 2016 11:16
Francesco Biscani
@bluescarni
Jun 23 2016 11:16
he moves around, albeit only by rolling
started opening drawers yesterday
Dario Izzo
@darioizzo
Jun 23 2016 11:17
ma guarda quella cicciotta sul ginocchio!!!
da mangiare
Francesco Biscani
@bluescarni
Jun 23 2016 11:17
:) ha la gambe super ciccie
Dario Izzo
@darioizzo
Jun 23 2016 11:18
ma la macchia giallina sul lenzuolo e pipi?
Francesco Biscani
@bluescarni
Jun 23 2016 11:19
piu' probabile vomito, di solito non esce dal pannolino
Dario Izzo
@darioizzo
Jun 23 2016 11:19
lol
mi manca un bebe a casa
Francesco Biscani
@bluescarni
Jun 23 2016 11:19
abbiamo cominciato a dargli cibo solido, l'altro giorno zucche tritate
:) e' bello ora, non ha bisogno di attenzione costante, si intrattiene anche da solo per un po'
rotola, esplora
Dario Izzo
@darioizzo
Jun 23 2016 11:20
aspetta che inizi a vomitarti sul computer
Virginia mi ha disegnato un tic tac toe sul divano "prezioso"
Francesco Biscani
@bluescarni
Jun 23 2016 11:20
:D
disegnato con penne o con attrezzi a incisione?
Dario Izzo
@darioizzo
Jun 23 2016 11:21
penna (indelebile)
gli attrezzi li ha usati sul muro.
Francesco Biscani
@bluescarni
Jun 23 2016 11:21
puoi sempre dire che fa parte dell'arte moderna
Dario Izzo
@darioizzo
Jun 23 2016 11:21
Una ficata, col martello ha preso a martellate il muro
Francesco Biscani
@bluescarni
Jun 23 2016 11:21
lol
Dario Izzo
@darioizzo
Jun 23 2016 11:21
e si divertiva perche faceva buchi
Francesco Biscani
@bluescarni
Jun 23 2016 11:22
se non ricordo male l'aveva fatto quando eravamo li' pure?
Dario Izzo
@darioizzo
Jun 23 2016 11:22
durante? allora lo hai visto ...
cci sua
Francesco Biscani
@bluescarni
Jun 23 2016 11:22
ricordo vagamente che qualcuno aveva lasciato il martello in camera loro, o qualcosa del genere :)
Dario Izzo
@darioizzo
Jun 23 2016 11:22
Francesco Biscani
@bluescarni
Jun 23 2016 11:23
lol
Dario Izzo
@darioizzo
Jun 23 2016 11:23
Se Ben inizia a mangiare solido ...... vuol dire che
la cacca inizia ad essere verda vera!!! Che bello
Francesco Biscani
@bluescarni
Jun 23 2016 11:26
verda merda puzzona, essenzialmente l'input e' indistinguibile dall'output
Dario Izzo
@darioizzo
Jun 23 2016 11:28
:)
Alla fine ho optato per:
    // Binomial coefficient implemented via gamma functions
double binomial_coefficient(vector_double::size_type n, vector_double::size_type k)
{
return std::exp(std::lgamma(n + 1.) - std::lgamma(k + 1.) - std::lgamma(n - k + 1.));
}
e vaffanculo
Francesco Biscani
@bluescarni
Jun 23 2016 11:29
si' e' quello che faccio anch'io... al limite puoi metterci un std::round o simile per arrotondate a intero
Dario Izzo
@darioizzo
Jun 23 2016 11:29
avevo fatto poi pero va a zero quando diventa grosso ....
Francesco Biscani
@bluescarni
Jun 23 2016 11:30
dovresti stare attento a quel n-k casomai possa diventare negativo
casterei n a double
Dario Izzo
@darioizzo
Jun 23 2016 11:34
oppure controllo che n>k
altrimente mica e definita sta robba
Francesco Biscani
@bluescarni
Jun 23 2016 11:35
si' ci sono estensioni a tutte le combinazioni
ma probabilmente non ti interessa
Dario Izzo
@darioizzo
Jun 23 2016 11:36
in realta a me serve solo la def stupida .. quella del 1700
Francesco Biscani
@bluescarni
Jun 23 2016 11:36
In [1]: from pyranha.math import binomial

In [2]: binomial(3,4)
Out[2]: 0

In [3]: binomial(3.1,4.2)
Out[3]: -0.019568692716008803

In [4]:
si' immagino
non so perche' al tempo mi fossi incaponito per avere tutti i casi possibili
Dario Izzo
@darioizzo
Jun 23 2016 11:37
in realta' in Audi e' servito
Li usiamo il binom coeff di piranha sui reali
Francesco Biscani
@bluescarni
Jun 23 2016 11:37
In [7]: binomial(F(4,5),2)
Out[7]: Fraction(-2, 25)

In [8]:
pure implementazione esatta per razionali
Dario Izzo
@darioizzo
Jun 23 2016 11:38
daje come sei preciso
Francesco Biscani
@bluescarni
Jun 23 2016 11:38
tutto per niente, chi se ne incula :)
Dario Izzo
@darioizzo
Jun 23 2016 11:39
no vedrai che un giorno .....
Francesco Biscani
@bluescarni
Jun 23 2016 11:39
verra' un giorno, come dice il manzoni
Dario Izzo
@darioizzo
Jun 23 2016 11:48
In realta' penso abbiamo fatto una cazzata a lasciar che le dimensioni della fitness etc. fossero rappresenatte da long int. Avremmo dovuto croppare tutto ad unsigned.
Francesco Biscani
@bluescarni
Jun 23 2016 11:48
quali sono i vantaggi?
Dario Izzo
@darioizzo
Jun 23 2016 11:49
Ci sono e saranno molte funzioni che operano su unsigned e che devono accettare n_f (tipo) come parametro.
Ed hanno senso perche n_f non sara mai > 10000000
MAI
Pero' mo come le chiamiamo visto che n_f e long int?
Francesco Biscani
@bluescarni
Jun 23 2016 11:49
n_f non e' unsigned long int?
Dario Izzo
@darioizzo
Jun 23 2016 11:49
si quello
Francesco Biscani
@bluescarni
Jun 23 2016 11:50
o scrivi le funzioni che accettano size_type invece di unsigned, oppure come prima cosa fai una conversione safe all'interno della funzione
la cosa piu' facile sarebbe usare boost::numeric_cast, ma qualcosa di simile si scrive facilmente
specialmente se ti interessano solo conversioni fra unsigned
Dario Izzo
@darioizzo
Jun 23 2016 11:52
Esempio:
Francesco Biscani
@bluescarni
Jun 23 2016 11:53
template <typename T, typename U>
inline T safe_cast(const U &x)
{
if (x > std::numeric_limits<T>::max()) {
pagmo_throw(std::overflow_error,"");
}
return static_cast<T>(x);
}

size_type n = 213232131;
auto nu = safe_cast<unsigned>(n);
questo e' tutto quel che ti serve se hai solo a che fare con unsigned conversions
Dario Izzo
@darioizzo
Jun 23 2016 11:55
la metto in utiols?
mi sembra utile
utile, utils ...
vedo un pattern
Francesco Biscani
@bluescarni
Jun 23 2016 11:55
se vuoi, ma bisognerebbe mettere dei check che stai solo operando su unsigned integers onde evitare malintesi
static_assert(std::is_unsigned<T>::value && std::is_unsigned<U>::value,"");
naturalmente si puo' generalizzare per signed-unsigned conversions, ma si complica un po'
Dario Izzo
@darioizzo
Jun 23 2016 12:00
Per ora lo terrei semplice in utils.
Lo uso per chiamare:
        van_der_corput(unsigned int b = 2u, unsigned int n = 0u) : m_base(b), m_counter(n)
con b e n che sono population::size_type
l' alternativa e modificare quei metodi ed usare population::size_type
Francesco Biscani
@bluescarni
Jun 23 2016 12:01
van_der_corput(safe_cast<unsigned>(b),safe_cast<unsigned>(n))
Dario Izzo
@darioizzo
Jun 23 2016 12:02
esatto
Francesco Biscani
@bluescarni
Jun 23 2016 12:32
era evidente dalla soluzione del radiale che, per bassi valori dell'accelerazione e nel caso di orbite bounded, l'effetto e' quello di far precededere omega?
(e che non ci sono altri effetti che influenzano, as esempio, eccentricita' e semiasse maggiore)
Dario Izzo
@darioizzo
Jun 23 2016 12:33
Non vi abbiamo mai guardato ...
nel radiale abbiamo sempre tenuto il tutto in r, theta ..
Francesco Biscani
@bluescarni
Jun 23 2016 12:34
questo sembrerebbe venire fuori dall'analisi perturbativa con le nuove variabili
Dario Izzo
@darioizzo
Jun 23 2016 12:34
Passare ai parametri osculanti potrebbe non essere banale
Francesco Biscani
@bluescarni
Jun 23 2016 12:35
certo infatti.. e' il motivo principale per cui questa cosa potrebbe essere remotamente utile
anzi in realta' credo che valga per qualsiasi valore dell'accelerazione, finche' l'orbita rimane bounded
Dario Izzo
@darioizzo
Jun 23 2016 12:36
DUnque la precessione di omega risulta dal mismatch delle frequenze su r e su theta.
Di quelle si hanno espressioni analitiche ...
Come si passi poi da f_r - f_theta ad omega non saprei (forse una costante?) boh
troppo tempo fa
Francesco Biscani
@bluescarni
Jun 23 2016 12:37
wait credo che diventi integrabile direttamente
Dario Izzo
@darioizzo
Jun 23 2016 12:37
Era Natale
Francesco Biscani
@bluescarni
Jun 23 2016 12:37
senza nemmeno fare perturbation theory
nelle nuove variabili l'hamiltoniano diventa
$\mathcal{H}\left( \Delta_1,\Delta_2,\Delta_3;\delta_1,\delta_2,\delta_3\right)=\Delta_1 + a\left[f\left(\Delta_1,\Delta_2\right)\cos\delta_1\right]^2$
dove $f$ is some function whatever
il punto e' che c'e' una sola coordinata -> 1 degree of freedom
l'unica coordinata e' $\delta_1$
$a$ e' il valore dell'accelerazione costante
se non ho fatto puttanate
Dario Izzo
@darioizzo
Jun 23 2016 12:41
quindi? integrabile easy
Francesco Biscani
@bluescarni
Jun 23 2016 12:42
non so dovrei vedere bene la forma funzionale, magari viene fuori anche una soluzione in termine di funzioni ellittiche ma con elementi orbitali invece di coordinate sferiche :)
pero
pero' si' integrabile
Dario Izzo
@darioizzo
Jun 23 2016 12:42
deve necessariamente essere ellittico
r e ellittico
Francesco Biscani
@bluescarni
Jun 23 2016 12:43
immagino di si'
Dario Izzo
@darioizzo
Jun 23 2016 12:43
le coordinate kepleriane dipendono da r tramite sin e cos
-> q.e.d
Francesco Biscani
@bluescarni
Jun 23 2016 12:43
cmq dovrebbe dare un buon insight sulla astrodinamica del problema
Dario Izzo
@darioizzo
Jun 23 2016 12:44
si certo ma cosa dicono le Eq. di Gauss a riguardo?
fammi vedere
Francesco Biscani
@bluescarni
Jun 23 2016 12:44
guarda che forse ho fatto cazzate
mi sono appena messo
sto cercando di chiudere sta merda
Dario Izzo
@darioizzo
Jun 23 2016 12:48
$\frac{d\omega}{dt} = -a \frac{p}{he} cos f$
Questa la eq. di Gauss relativa ad $\omega$
Predice una precessione che (in media) e' lineare con $a$
Francesco Biscani
@bluescarni
Jun 23 2016 12:49
si' vien fuori qualcosa di simile, solo che la mia variabile e' una anomalia eccentrica
piuttosto che vera
Dario Izzo
@darioizzo
Jun 23 2016 12:49
$a$ e l' accelerazione
quindi in media e' lo stesso
conferma che hai fatto i conti giusti.
Francesco Biscani
@bluescarni
Jun 23 2016 12:51
nel mio caso cambia anche la timescale, il tempo in quelle equazioni sopra e' il tempo fittizio
quindi credo che occorra riscalare, ma la forma funzionale dovrebbe essere la stessa
Dario Izzo
@darioizzo
Jun 23 2016 12:52
se fai la media non conta manco quello no?
Per calcolare dw al giro
Francesco Biscani
@bluescarni
Jun 23 2016 12:52
al giro si', ma si solito riporto la dw per unita' di tempo
tipo $d\omega/d\tau$
Dario Izzo
@darioizzo
Jun 23 2016 12:53
Le Eq. si Gauss, credo, non siano integrabili in questa forma (dovrei vedere). Se le tue lo sono, il vantaggio e' li
COme insight, credo, diano le stesse informazioni delle eq. di Gauss
Francesco Biscani
@bluescarni
Jun 23 2016 12:54
alla fine e' un problema integrabile, in realta' mi va bene non dovermi sbattere di nuovo la parte perturbativa :)
Dario Izzo
@darioizzo
Jun 23 2016 12:54
infatti
Francesco Biscani
@bluescarni
Jun 23 2016 12:55
manco faccio il calcolo della soluzione, dico solo che il cambio di variabili lo rende integrabile e vaffanculo
integrabile trivially
"trivially"
Dario Izzo
@darioizzo
Jun 23 2016 12:55
lascia tutto al lettore dajee