Używam funkcji pow
w C i zapisuję wartość zwracaną w typie całkowitym. zobacz fragment kodu poniżej:zwracana wartość pow() zostaje zaokrąglona w dół, jeśli jest przypisana do liczby całkowitej
for (i = 0; i < 5; i++){
val = (int)pow(5, i);
printf("%d, ", val);
}
tutaj i
i val
są liczbami całkowitymi, a wyjście jest 1, 5, 24, 124, 624
. Sądzę, że dzieje się tak dlatego, że float 25 jest traktowany jako 24,99999 ..., który zostaje zaokrąglony do 24 w przypadku przypisania do liczby całkowitej.
Jak mogę to zrobić, jeśli nadal potrzebuję przechowywać zwracaną wartość w int?
'float' 25 nie jest" traktowany jako "' 24.9 ... ', 25 może być dokładnie przedstawiony jako float. Po prostu 'pow' nie jest w pełni dokładny iz jakiegoś powodu przy tej okazji stracił niskie. Dla wielu wartości nie może być w pełni dokładna, ponieważ poprawna matematycznie odpowiedź nie jest dokładną wartością zmiennoprzecinkową, ale w przypadku tych obliczeń może być, a zatem jest to kwestia jakości wdrożenia, niezależnie od tego, czy jest. –
Zobacz również http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int w celu omówienia sposobu wdrożenia wersji integer pow() –
Nie używaj 'pow' dla całkowitej potęgi. Istnieje wiele lepszych, bezpieczniejszych sposobów. Przy okazji, na jakiej platformie korzystasz z tego zachowania? Myślałem, że dobry 'pow' będzie zawsze dokładny dla liczb całkowitych, gdzie dokładny wynik pasuje do' double'. –