Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Python: de ce x/y da valoare gresita?

- - - - -
  • Please log in to reply
11 replies to this topic

#1
alerta

alerta

    Junior Member

  • Grup: Members
  • Posts: 36
  • Înscris: 27.08.2008
Am rulat un fisier *.py continand exact urmatorul cod
x = 15
x1 = 15.0
y = 4
print(x/y)
print(x1/y)
in Python versiunea 2.7.15rc1, asa cum este instalata de Ubuntu 18.04.1 LTS. Rezultatul afisat pe ecran spune, inexplicabil, ca 15/4 = 3, in vreme ce 15.0/4 da rezultatul corect 3.75. Insist, fisierul *.py executat a continut exact codul de deasupra, nimic in plus, nimic in minus. Codul a fost scris cu gedit versiunea 3.28.1. Conform tuturor manualelor si tutorialelor consultate, operatia 15/4 este impartirea reala (cu rezultat 3.75) si nu impartirea intreaga //, chiar daca eu nu dau nicio indicatie suplimentara prin scrierea 15.0 a numaratorului. Orice alt exemplu de aceeasi natura m-a condus la acelasi rezultat "nepermis". Are cineva o explicatie certa in materie? Este cunoscut vreun neajuns al versiunii Python folosite? Multumesc!

Edited by alerta, 07 October 2018 - 01:26.


#2
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

Quote

Rezultatul afisat pe ecran spune, inexplicabil, ca 15/4 = 3, in vreme ce 15.0/4 da rezultatul corect 3.75.
Asa este in orice limbaj de programare  si asa este si corect.De ce ? Puna mana pe carte si nu mai inrteba pe altii sa faca munca in locul tau.

Edited by CrocodiluMereuVesel, 07 October 2018 - 01:37.


#3
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
operatii pe numere intregi
operatii pe numere reale

Quote

Este cunoscut vreun neajuns al versiunii Python folosite? Multumesc!
manualul (pentru versiunea de python) ce spune?

Edited by MarianG, 07 October 2018 - 02:40.


#4
alerta

alerta

    Junior Member

  • Grup: Members
  • Posts: 36
  • Înscris: 27.08.2008

View PostCrocodiluMereuVesel, on 07 octombrie 2018 - 01:37, said:

Asa este in orice limbaj de programare  si asa este si corect.De ce ? Puna mana pe carte si nu mai inrteba pe altii sa faca munca in locul tau.
In primul rand, atunci cand am vorbit despre manuale si tutoriale consultate, nu am vorbit gratuit. Toate sursele pe care le-am consultat spun ca rezultatul operatiei 15/4 este 3.75 (cu numarator 15, si nu 15.0) in vreme ce ruland eu exact aceleasi coduri (in implementarea Python pe care o am la dispozitie) obtin rezultatul 3, __fara zecimale__. Asta este obiectul si motivul postarii mele. Si, in acest sens, eu chiar am facut numeroase si variate verificari inainte de a-mi posta intrebarea; stiu bine ce inseamna rigoarea verificarilor. Exemplul suplimentar (cu numaratorul 15.0) l-am inserat eu, tocmai pentru a evidentia anomalia primului rezultat. "Raspunsul" citat deasupra tradeaza doua lacune: (a) pierde din vedere faptul ca tipul variabilelor NU se declara in Pythonsi si (b) tradeaza lipsa de educatie. As fi in continuare recunoscator pentru orice raspuns documentat, dar nu si pentru alte reactii deplasate. Multumesc!

View PostMarianG, on 07 octombrie 2018 - 02:29, said:

operatii pe numere intregi
operatii pe numere reale


manualul (pentru versiunea de python) ce spune?
Din nou, in Python NU declari numerele ca fiind intregi sau reale, ci introduci direct numerele, iar operatorul / trebuie sa faca impartirea reala, spre deosebire de operatorul //.

#5
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005
https://www.python.o.../peps/pep-0238/

from __future__ import division

In Python 2.7: By default, division operator will return integer output.

#6
dexterash

dexterash

    --something---

  • Grup: Senior Members
  • Posts: 22,912
  • Înscris: 19.08.2004

View Postalerta, on 07 octombrie 2018 - 02:50, said:

Toate sursele pe care le-am consultat
Care or fi alea? Primele 5 rezultate din Google? Daca da, sa fii sanatos! Pana la "toate sursele" mai ai de ... sapat.

#7
alerta

alerta

    Junior Member

  • Grup: Members
  • Posts: 36
  • Înscris: 27.08.2008
Nu mi-am imaginat ca Python a folosit pentru operatorul / o definitie in dezacord cu definitia consacrata de limbaje ca C. De altfel, chiar citatul dat ca raspuns deasupra arata ca definitia Python era in dezacord nu numai cu limbajul C, ci si cu propriul sau principiu al nedeclararii tipului de variabila (reala sau intreaga) cata vreme initializarea cu numarul 15 conducea la un alt rezultat decat initializarea cu acelasi numar 15, insa scris sub forma 15.0. Este banal de observat ca ininitializarea cu 15.0 era o declaratie de tip a variabilei, iar, prin efectele sale de calcul, aceasta declaratie de tip era absolut esentiala in Python. Nu sunt programator, insa aici a existat cu siguranta o inadvertenta chiar si in raport cu propriile principii ale Python. Chiar nu mi-am imaginat o asemenea situatie si este prea ieftin sa se suspecteze ca am inceput primele contacte cu Python folosind manuale care ar mentiona schimbarea masiva din definitia operatorului / ; nu va exista o polemica pe tema asta. Dar informatia putea fi data si simplu, de la bun inceput: "Distributia Python instalata de Ubuntu este depasita si, la timpul acelei distributii, Python folosea o alta definitie a operatorului / ". Era greu sa se inchida topicul atat de natural si rapid? Sigur ca era greu, pentru expertii setosi sa lapideze nou venitii pe forum.

#8
f300

f300

    30k si ma duc

  • Grup: Senior Members
  • Posts: 30,000
  • Înscris: 27.09.2008
Stati sa vedeti nebunii cu float chiar la chestiile care par banale:

>>> a = 1 - 0.9
>>> print a
0.1
>>> b = 10*a
>>> print b
1.0
>>> print int(b)
0



#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007

View Postalerta, on 07 octombrie 2018 - 10:41, said:

Nu mi-am imaginat ca Python a folosit pentru operatorul / o definitie in dezacord cu definitia consacrata de limbaje ca C.

C-ul tot un intreg foloseste daca nu-i indici explicit ca vrei float/double.

#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,440
  • Înscris: 10.08.2005

View Postalerta, on 07 octombrie 2018 - 02:50, said:

Din nou, in Python NU declari numerele ca fiind intregi sau reale, ci introduci direct numerele, iar operatorul / trebuie sa faca impartirea reala, spre deosebire de operatorul //.
mare atentie, tu ai spus ca este "inexplicabil"

#11
cspot

cspot

    Guru Member

  • Grup: Senior Members
  • Posts: 12,855
  • Înscris: 22.07.2004
Nu inteleg care e dilema. Daca lucrezi cu numere intregi, rezultatul e tot in numere intregi. Imi scapa mie ceva ?

#12
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postalerta, on 07 octombrie 2018 - 01:23, said:

Python: de ce x/y da valoare gresita?

Python, la fel ca multe alte limbaje, folosește procesorul pentru efectuarea împărțirii.

"Greșeala" e în electronica din CPU, și nu e o greșeală, ci așa e gândit să funcționeze.

Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate