#1 Le 20/11/2008, à 23:04
- Dark-Sham
Comment créer les fonctions floor() et ceil() ?
Bonjour à tous !
J'aimerais savoir, par curiosité, comment est-il possible de créer ces deux fonctions informatiquement ?
Je veux dire, sur papier, c'est facile, mais comment les coder ?
Merci de vos réponses
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#2 Le 20/11/2008, à 23:17
- Link31
Re : Comment créer les fonctions floor() et ceil() ?
J'aimerais savoir, par curiosité, comment est-il possible de créer ces deux fonctions informatiquement ?
Je veux dire, sur papier, c'est facile, mais comment les coder ?
Il faut :
- un éditeur de texte
- un compilateur
- un cerveau
- le passage du standard C qui concerne ces fonctions
- les sources de la glibc implémentant ces fonctions (c'est toujours plus pratique d'y jeter un coup d'œil)
Hors ligne
#3 Le 21/11/2008, à 07:28
- Dark-Sham
Re : Comment créer les fonctions floor() et ceil() ?
Il faut :
- un éditeur de texte
- un compilateur
- un cerveau
Ça va j'suis équipé
- le passage du standard C qui concerne ces fonctions
- les sources de la glibc implémentant ces fonctions (c'est toujours plus pratique d'y jeter un coup d'œil)
Ça j'ai cherché, mais j'ai du mal à trouver @_@
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#4 Le 21/11/2008, à 11:31
- aleph
Re : Comment créer les fonctions floor() et ceil() ?
Bonjour à tous !
J'aimerais savoir, par curiosité, comment est-il possible de créer ces deux fonctions informatiquement ?
Je veux dire, sur papier, c'est facile, mais comment les coder ?![]()
Merci de vos réponses
Question intéressante.
La gestion des nombres - qui semble intuitivement facile - en informatique, ce n'est pas quelque chose de compliqué, c'est *très* compliqué.
Quand tu fais allusion à "sur papier, c'est facile", tu penses certainement à quelque chose qui ressemble à un "gommage des chiffres derrière la virgule". En informatique, le problème est tout autre.
Je ne pense pas qu'en fouillant dans du code, tu puisses améliorer tes connaissances sur le sujet.
Pour appréhender le problème: Google -> IEEE 754. Wikipédia, http://en.wikipedia.org/wiki/IEEE_754#Rounding_algorithms , pourrait être un point d'entrée.
Dans ce domaine, de bonnes connaissances mathématiques, se révèlent assez vite souhaitables.
#5 Le 21/11/2008, à 13:33
- Dark-Sham
Re : Comment créer les fonctions floor() et ceil() ?
Merci de cette réponse !
Pour les connaissances mathématiques, 17 de moyenne en 1ère S, ça va ?
Je vais jeter un coup d'oeil à ton lien, merci !
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#6 Le 21/11/2008, à 14:47
- aleph
Re : Comment créer les fonctions floor() et ceil() ?
> Dark-Sham
Il est bien difficile de cerner le niveau mathématique requis. On pourrait formuler ainsi:
"Ne sois pas surpris si pour le calcul d'une "simple" fonction de base comme un sinus, sin(x), on parle de suite, série, convergence, Fourier ou polynôme de Tchebicheff" , sans compter tout le problème purement "informatique" de la représentation des nombres.
Rassure-toi, je ne suis pas compétent dans le domaine. Mes connaissances se limitent à un :
"Ah, on utilise une approximation de Tchebicheff, je vois, c'est bigrement compliqué".
-> http://en.wikipedia.org/wiki/Trigonometric_functions#Computation -> 6 Computation
#7 Le 21/11/2008, à 15:37
- Didouuuuuuu
Re : Comment créer les fonctions floor() et ceil() ?
en prenant la partie entière du flottant que l'on peut isoler en convertissant en entier pourvu que le type entier soit dimensionné pour.
#8 Le 21/11/2008, à 16:40
- aleph
Re : Comment créer les fonctions floor() et ceil() ?
Ouais... La question est de savoir si Dark-Sham parlait de la *création* de fonctions ou simplement du calcul d'arrondis.
>>> floor(1.6) == float(int(1.6))
True
>>> ceil(1.6) == float(int(1.6+0.5))
True
#9 Le 21/11/2008, à 18:33
- rniamo
Re : Comment créer les fonctions floor() et ceil() ?
tu veux quoi, comment les faire en C ou autre ou comment elles sont faites en bas niveau ?
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#10 Le 21/11/2008, à 21:05
- Dark-Sham
Re : Comment créer les fonctions floor() et ceil() ?
Ben c'est surtout algorithiquement, comment on peut trouver l'entier supérieur ou inférieur ?
Parce qu'une boucle testant tous les entiers jusqu'à atteindre le supérieur ou l'inférieur au nombre donné en paramètre, ça risque d'être un peu lourd ^^"
Dernière modification par Dark-Sham (Le 21/11/2008, à 21:06)
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#11 Le 21/11/2008, à 21:25
- nicolas66
Re : Comment créer les fonctions floor() et ceil() ?
Bah il me semble que aleph a donné la solution à ton problème non ?
"The computer was born to solve problems that did not exist before." (B. Gates)
Hors ligne
#12 Le 21/11/2008, à 22:54
- rniamo
Re : Comment créer les fonctions floor() et ceil() ?
oui, l'idée est de tester si le cast en int (troncature) +0.5 est supèrieur ou inférieur à ta valeur, là tu peux arrondir correctement.
Pour floor tu renvoi la troncature (cast), pour ceil tu renvoie la troncature si elle vaut le nombre ou la troncature+1 sinon.
< Quelques un des mes programmes | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
\ ^__^
\ (o o)\_______
(___)\ )\
Hors ligne
#13 Le 22/11/2008, à 11:16
- Dark-Sham
Re : Comment créer les fonctions floor() et ceil() ?
(La "troncature" c'est la partie entière ?)
Ok, j'avais pas bien saisi le sens de ce qui était écrit dans le lien d'aleph ^^
Mais justement, cette fonction "partie entière" comment est-elle faite ? Je pense m'être mal exprimé en fait. Ce que je voudrais savoir, c'est comment on peut extraire cette partie entière.
Je ne suis peut-être pas clair, dites-le moi si c'est le cas
Merci de vos réponses sinon
Dernière modification par Dark-Sham (Le 22/11/2008, à 11:17)
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#14 Le 22/11/2008, à 11:51
- aleph
Re : Comment créer les fonctions floor() et ceil() ?
> Dark-Sham
par ex. dans des papiers de ce genre :
http://www.cs.cas.cz/portal/AlgoMath/NumberTheory/ArithmeticFunctions/IntegerRoundingFunctions.htm
#15 Le 22/11/2008, à 15:18
- Dark-Sham
Re : Comment créer les fonctions floor() et ceil() ?
Ah merci, je crois que c'est ce que je cherche ! Je vais voir ça plus en détail !
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#16 Le 22/11/2008, à 16:11
- ludovic889
Re : Comment créer les fonctions floor() et ceil() ?
salut,
en fait, je ne pense pas qu'en informatique, on calcule EXPLICITEMENT la fonction partie entière (int), car elle découle du mode de représentation. Autrement dit, dans les entrailles de ta machine, il y a une méthode pour représenter les nombres à virgules (flottants) et il est prévu quelque part de fournir les arrondis.
Par exemple, pour http://fr.wikipedia.org/wiki/IEEE_754, on peut lire
L’IEEE 754 est un standard pour la représentation des nombres à virgule flottante en binaire. Il est le plus employé actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique, avec les CPU et les FPU. Le standard définit les formats de représentation des nombres à virgule flottante (signe, mantisse, exposant, nombres dénormalisés) et valeurs spéciales (infinis et NaN), en même temps qu’un ensemble d’opérations sur les nombres flottants. Il décrit aussi quatre modes d'arrondi et cinq exceptions (comprenant les conditions dans lesquelles une exception se produit, et ce qu'il se passe dans ce cas).
Ce n'est pas grave de ne pas avoir l'heure si on a le temps.
Hors ligne
#17 Le 22/11/2008, à 17:12
- nicolas.sitbon
Re : Comment créer les fonctions floor() et ceil() ?
Malheureusement, la norme n'impose pas ce standard mais le recommande seulement.
Hors ligne
#18 Le 22/11/2008, à 17:35
- ludovic889
Re : Comment créer les fonctions floor() et ceil() ?
ah, bon ?
je me suis appuyé sur l'article wiki...
mais comment est définie INT (la fonction) dans ce cas ?
Dernière modification par ludovic889 (Le 22/11/2008, à 17:35)
Ce n'est pas grave de ne pas avoir l'heure si on a le temps.
Hors ligne
#19 Le 22/11/2008, à 21:31
- Dark-Sham
Re : Comment créer les fonctions floor() et ceil() ?
c'est en partie de ce que je cherche à comprendre, mais je crois que le dernier lien d'aleph y répond
Dernière modification par Dark-Sham (Le 22/11/2008, à 21:32)
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne
#20 Le 22/11/2008, à 21:37
- ludovic889
Re : Comment créer les fonctions floor() et ceil() ?
en fait non !
le lien ne propose aucun algorithme !
Ce n'est pas grave de ne pas avoir l'heure si on a le temps.
Hors ligne
#21 Le 23/11/2008, à 09:03
- Dark-Sham
Re : Comment créer les fonctions floor() et ceil() ?
Peut-être, mais les formules mathématiques indiquées peuvent être "traduites" en algo non ?
Script de sauvegarde/restauration APT
Ubuntu 8.04 "Hardy Heron"
CPU : AMD Athlon XP 2800+ ; GPU : ATI Radeon 9250/9200 Series ; RAM : 2 Gigots + 512 Mégots ; Carte mère : Asus A7N8X-E Deluxe
Hors ligne