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.