JeuxOnLineForumsPlusConnectés : 341 (sites) | 656 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Fonction Mathématique] Partie entière et décimale... RSS
   
Répondre
Partager Outils Rechercher
Avatar de Baldurien
Baldurien
Roi
 
Avatar de Baldurien
 

[Fonction Mathématique] Partie entière et décimale...

Bonjour

Je recherche une fonction simulant la partie entière et la partie décimale d'un nombre en rappelant que la partie entière est égale à floor() (arrondi par entier inférieur) et la partie décimale est égale à x - floor(x); (logique)

Le truc c'est que Neverwinter ne propose pas de base de fonction floor, encore moins de fonction round, ou ceil... Bref: je suis ***** et je recherche un équivalent si quelqu'un l'a déjà fait...

Voilà
Lien direct vers le message - Vieux
Avatar de Hidwulf
Hidwulf
Roi
 
Avatar de Hidwulf
 
Ben si j'ai bien compris, tu pourrais peut-être faire du transtypage, un cast en fait non?

En admettant que ton nombre soit un float, tu force le stockage de ce nombre dans un type int, et forcément tu as la partie entière. Et tu peux accéder a la partie décimale en retirant au float l'int trouve que tu devra retranstyper.

les cast ce doit être du stylr : inttofloat, floattoint ... si je me souviens bien

Bonne chance.
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
il semblait avoir testé un jour que avec un float to int suivit d'un int to float on récupérais bien le float qu'on avait mis, et qu'il n'y avait pas de perte sur les partie decimal .. mais bon, c loin, me suis peut etre trompé, et j'ai plus mon test sous la main ... donc en fait je suis juste là pour émettre un doute ... et j'ai peut etre rien compris aussi
bon ca va, je sors
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Reyan, ce que tu dis là est impossible ou alors Bioware a vraiment trafiqué son moteur ....

Par contre il me semble (c'était vrai au moins jusqu'à la 1.27), que la fonction FloatToInt() est en fait un Floor() et pas un Round() (ce qui peut d'ailleurs facilement être corrigé, mais bon..) Donc ce que tu veux est très simple :

Code PHP:
//Fonction partie décimale
float DecPartfloat fNum );


float DecPartfloat fNum )
{

    
int nT FloatToIntfNum );
    
    return 
fNum IntToFloatnT );


Pour tout nombre positif, ça devrait marcher
Bien sûr pour un nombre négatif ça ne sera pas le cas
Mais je pense que ça te suffira, sinon suffit d'utiliser la fonction abs() puis de rétablir le signe à la fin.
Lien direct vers le message - Vieux
Avatar de Hidwulf
Hidwulf
Roi
 
Avatar de Hidwulf
 
Ah bizarre
Ben le fait qu'un int prend un nombre moindre de bit et ne peut en aucun cas être décimal je me demande bien comment on pourrait récupérer l'info

ex:

float nombre = 3.15;
int i = 0;
float j = 0.0;

i = nombre; /* i = 3, perte des bits dis décimaux */

j = inttofloat(i); /* j = (float)i */
/* en gros on rajoute les bits poids forts à un manquant */

[..]

Ben si jamais vous constater que j vaut 3.15 alors là ... nwn est conçu comme jamais. Car cela défierai toute les loi de l'architecture binaire ...
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
Citation:
Provient du message de Jedaï
Reyan, ce que tu dis là est impossible ou alors Bioware a vraiment trafiqué son moteur ....
me doutait bien d'un truc du genre ^_^
c'est pour ca que j'avais émis des sérieuses réserve sur mes info, mais dans lea m^^eme veine, FloatToInt ne m'avait pas semble renvoyer 2 pour 2.5 .. mais bon, il était tard, il y avait du brouillard, et j'étais fatigué
et plus me souvient pas bien, pis c loin donc bon ...
rq : comme ces tests étaient fait en 1.27, c'est sand oute toi qui a raison, puisque j'ai pas fait trop gaffe au résultat, c'était pas ca qui m'interessais ^_^
Lien direct vers le message - Vieux
Avatar de Baldurien
Baldurien
Roi
 
Avatar de Baldurien
 
(en maths la partie entière de -1.5 c'est -2 bref)

je vais essayer le FloatToInt en espérant que ce soit un floor... merci!
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Ben ça dépende de la définition de partie entière que tu prend, mais bon... C'est vrai que c'est la plus couramment acceptée...

Bon, je viens de vérifier, FloatToInt() n'est même pas un Floor(),
A priori elle fait Ceil() pour les négatifs et Floor() pour les positifs...
Je fais encore quelques tests, mais je suppose qu'en fait ce comportement va t'arranger si tu voulais que la partie décimale de -2.4 soit -0.4, sinon ...
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Ca y est, c'est sûr : FloatToInt() est un Floor() pour les positifs et un Ceil() pour les négatifs

Ce comportement t'arrange-t-il ou veux tu qu'on le modifie afin de respecter la définition de la partie entière ?
Lien direct vers le message - Vieux
Avatar de Baldurien
Baldurien
Roi
 
Avatar de Baldurien
 
pour le FloatToInt : ah cool ça va m'aider , bref. maintenant autre prob:

je voudrais savoir comment fonctionne SetTime

je veux en fait contrôler le repos: genre tu récupère 75% de tes points de vie, alors 0.75*8 = 6 heures s'écoulent.

Là, mon SetTime est du genre:

SetTime( GetTimeHour() + heure, GetTimeMinute() + minutes, 0, 0 );

Mais quand par exemple il y a 50 minutes cela passe au jour suivant (!) au lieu d'augmenter l'heure de 1 @@

Bref: quel est le moyen le plus simple de faire avancer le temps de quelques heures et quelques minutes?

(en tenant compte de la date actuelle?)

merci
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Hum.. Es-tu sûr que ce soit un bug ?
Je veux dire : quel est le paramètrage de ton module point de vue rapport Minute Par Heure ??

Si tu as toujours 2min par heure, il est peut-être logique que SetTime() agisse ainsi.

Pour t'éviter ces problème, tu peux utiliser la fonction suivante :
HoursToSeconds( int nNbHeures );
Elle te permettra de corriger ton nombre de minute ainsi :
Code PHP:
int nNbMinutes 50;

int nNbMinHour FloatToIntHoursToSeconds) / 60.0 );

int nAddHours nNbMinutes nNbMinHour;

nNbMinutes %= nNbMinHour
Voilà

[Edit] Pour corriger des erreurs idiotes
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Oups, en fait ce que je t'ai donné au-dessus n'as aucun intérêt, si ce n'est pour un test...
En fait je te conseille plutôt de faire tes calculs de durées en minutes avec la seule valeur nNbMinHour (dont je t'ai donné la manière pour l'obtenir au-dessus) plutôt que 60.0 minutes par heures, ça t'évitera bien des problèmes.

Si tu veux fournir les bonnes valeurs à SetTime() tout en utilisant 60.0 dans tes calculs antérieurs (ce qui est je pense une mauvaise idée), utilise plutôt ça :
Code PHP:
//nNbMinutes est le nombre de minute à convertir
int nNbMinHour FloatToIntHoursToSeconds) / 60.0 );
int nAddHours nNbMinutes 60;
nNbMinutes %= 60.0;
nNbMinutes /= nNbMinHour
Lien direct vers le message - Vieux
Avatar de Baldurien
Baldurien
Roi
 
Avatar de Baldurien
 
heu je comprend tjrs pas la fonction:/

bon: je change que l'heure

vu que dans mon module une heure = 1 minute de temps réel
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Hum, he bien SetTime() regarde combien il a de minutes, puis il les convertis en heures selon le ratio actuel minutes/heures de ton module, autrement dit, là il rajoute 50h à la date actuelle...
Lien direct vers le message - Vieux
Avatar de Baldurien
Baldurien
Roi
 
Avatar de Baldurien
 
oui c en ça que c pas clair

ils auraient pu faire une fonction SetTime basée sur des secondes de jeu...
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Fonction Mathématique] Partie entière et décimale...
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 02h08.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite