3973 - Logaritm
De la Universitas MediaWiki
Cerinţa
Dându-se un număr real x, să se scrie un program care calculează ln(x) cu 6 zecimale exacte.
Date de intrare
Programul citește de la tastatură numărul real x.
Date de ieșire
Programul va afișa pe ecran rezultatul cu 6 zecimale exacte.
Restricţii şi precizări
- 1 ⩽ x ⩽ 2.000.000.000.
- x va avea cel mult 6 zecimale.
- Nu se vor folosi funcțiile logaritmice ale limbajului C++
Exemplu 1
- Intrare
5.12
- Ieșire
Datele de intrare corespund restrictiilor impuse 1.633154
Exemplu 2
- Intrare
-1
- Ieșire
Datele de intrare nu corespund restrictiilor impuse
Rezolvare
import math
def ln(x):
# Precizia pe care o dorim
epsilon = 1e-10
# Inițializăm limitele intervalului pentru metoda bisecției
low = 0
high = x if x > 1 else 1
# Aplicăm metoda bisecției
while high - low > epsilon:
mid = (low + high) / 2
if math.exp(mid) < x:
low = mid
else:
high = mid
# Returnăm rezultatul cu 6 zecimale exacte
return round((low + high) / 2, 6)
def validare(x):
if not 1 <= x <= 2_000_000_000:
return False, "Datele de intrare nu corespund restrictiilor impuse"
return True, "Datele de intrare corespund restrictiilor impuse"
def main():
print("Introduceți numărul real x:")
x = float(input())
valid, message = validare(x)
print(message)
if not valid:
return
print("ln(x) calculat cu 6 zecimale exacte este:")
print(ln(x))
if __name__ == "__main__":
main()