Nella creazione delle funzioni trigonometriche my_sind(d)
, my_cosd(d)
, my_tand(d)
, che usava un argomento di grado piuttosto che uno radiante e forniva risposte esatte a multipli di 90, ho notato che il risultato era a volte -0.0
piuttosto che 0.0
.
my_sind( 0.0) --> 0.0
my_sind(-0.0) --> -0.0
my_sind(180.0) --> -0.0
my_sind(360.0) --> 0.0
sin()
e tan()
restituiscono in genere lo stesso risultato zero del segno per un dato input zero di segno. È logico che my_sin()
debba corrispondere a sin()
per tali input.
my_sind( 0.0) alike sin( 0.0) --> 0.0
my_sind(-0.0) alike sin(-0.0) --> -0.0
La domanda è : per quale numero intero non_zero_n
dovrebbe / potrebbe il risultato restituire sempre -0.0
per my_sind(180*non_zero_n)
, my_cosd(180*n + 180)
, my_tand(180*non_zero_n)
?
È abbastanza facile codificare in modo che solo f(-0.0)
generi -0.0
e sia fatto con esso. Semplice chiedersi se c'è qualche ragione per rendere altro f(x)
return -0.0
per qualsiasi altro ( diverso da zero ) x
e l'importanza di assicurare quel segno.
Nota: non si tratta del motivo per cui 0.0
vs. -0.0
si verifica. Questo non è il motivo per cui cos(machine_pi/4)
non restituisce 0.0
. Né si tratta di come controllare la generazione di 0.0
o -0.0
. La vedo meglio come domanda di design.