Pracuję na szerokościach i długościach geograficznych w celu określenia lokalizacji biznesowych i popadłem w dziwne zachowania.Dlaczego uzyskuję inny wynik, gdy wykonuję obliczenia matematyczne na cytowanej lub niecedowanej zmiennej?
W poniższym fragmencie kodu Perl przypisywanie danych do $v1
następuje do 1. Po wywołaniu acos($v1)
pojawia się błąd sqrt
. Kiedy dzwonię pod numer acos("$v1")
(z cudzysłowami), nie robię tego. Wywołanie acos(1)
również nie powoduje wystąpienia błędu. Dlaczego cytaty mają znaczenie?
use strict;
use warnings 'all';
sub acos {
my $rad = shift;
return (atan2(sqrt(1 - $rad**2), $rad));
}
my $v1 = (0.520371764072297 * 0.520371764072297) +
(0.853939826425894 * 0.853939826425894 * 1);
print acos($v1); # Can't take sqrt of -8.88178e-16 at foo line 8.
print acos("$v1"); # 0
pokrewne: [Bug # 127182 dla perl5: Jedna cyfra krótki, aby prawidłowo stringify podwójne] (https://rt.perl.org/Public/Bug/Display.html?id=127182) – ThisSuitIsBlackNot
Zobacz także [Dlaczego Perl jest niezgodny z zaokrąglaniem sprintf?] (http://stackoverflow.com/q/ 41312890/2173773) –