2430

Les gens codant proprement, vous faites comment du coup quand une taille de fichier, de std::vector, etc est non signée et que vous souhaitez faire une opération dessus ? Vous ne castez vraiment jamais ?

2431

Tu as un exemple d'opération de ce genre qui nécessite absolument des nombres signés ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2432

je ne sais pas, fseek en fin de fichier - une taille de structure par exemple. Enfin c'est un peu bidon, j'avoue cheeky

2433

fseek(file, sizeof(struct), SEEK_END); cheeky

(tiens, les balises [spoiler] ne cachent pas les [pre] sad)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2434

mmm tiens, c'est un positif qu'on passe ? Je ne me souvenais plus cheeky Bon enfin il doit y avoir d'autres exemples, j'avais prévenu que c'était bidon embarrassed

2435

struct stat fileStat; size_t fileSize; fd = open(filename, O_RDONLY); fstat(fd, &fileStat); fileSize = fileStat.st_size;
Et paf pasteque.
Ok ca ne fait que donner la taille du fichier, mais c'est mieux que fseek/ftell embarrassed
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2436

./2430 : justement c'est un bon indicateur, si tu fais des opérations sur des tailles tu ne devrais jamais sortir de l'espace des nombres non signés, sinon je suis d'accord que c'est bancal. Comme 0² tu as un exemple en tête ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2437

J'ai une question bête qui est HS par rapport à votre discussion, mais qui ne nécessite pas l'ouverture d'un nouveau sujet...
Est-ce qu'il y a moyen d'accéder directement au port RS232 en VB.net ? On a une très vieille sonde dont les résultats sont interprétés par une vieille appli VB (a priori du VB4.0), et le gars qui a développé l'appli me demandait si une réécriture en VB.net pour l'exploiter sur un ordi plus récent fonctionnerait (là, c'est sur un poste sous XP, l'appli bugge quand on la lance avec 7 ou supérieur - mais je ne sais même pas si c'est à cause de l'appli ou à cause de l'OS et de la prise en charge du RS232).
avatar

2438

Mise a jour vers VB6 c'est plus mieux non?

VB.net et VB "classique" n'ont en commun que VB.. Porter vers .Net == réécriture complete ou presque :/
(Sinon oui tu peux acceder a un port série)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2439

le truc c'est qu'en VB (pas net) tu pouvais ouvrir une connexion RS232 comme on ouvre un fichier, ensuite y'a eu MSCOMM pour ça et maintenant c'est une classe serialport...https://msdn.microsoft.com/fr-fr/library/system.io.ports.serialport%28v=vs.110%29.aspx
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2440

J'ai toujours connu l'objet COMM, depuis VB3.0 confus
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2441

on peut passer par les api win32 sinon. c'est un peu chiant a réécrire mais ca marche.

dieu merci c'est du série pas du parallèle...

2442

Godzil (./2440) :
J'ai toujours connu l'objet COMM, depuis VB3.0 confus
ouais bah à l'époque tu pouvais encore utiliser le bon vieux open (hérité du Basic) pour communiquer sur port série ^^
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2443

Tu m'apprends un truc grin

Je testerais ce soir tien smile
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2444

Zeph (./2436) :
justement c'est un bon indicateur, si tu fais des opérations sur des tailles tu ne devrais jamais sortir de l'espace des nombres non signés, sinon je suis d'accord que c'est bancal.

Sauf que, contrairement au nombres signés, c'est un espace qui pu un peu beaucoup, où la soustraction est très problématique, donc par exemple on ne peut pas résoudre systématiquement dans l'espace une équation de premier degré ( 5x+142=0), etc. Bref même pas un corps.

Du coup la sureté des opérations instables (soustraction) dépend non pas du type, mais de la valeur des variables : (a-b) appartient à |N ssi a>=b, ce qu'il est impossible de savoir à la compilation. Du coup :

-soit on accepte la soustraction, et on a un type qui suxe totalement, instable
-soit on refuse la soustraction.
-soit on accepte la soustraction en castant vers les entiers relatifs (au moins dans certains cas), c'est mathématiquement bien pus logique mais ça casse presque tout l'intérêt d'utiliser des nombres non signés.
-soit on fait une soustraction complétement dégueu (où a-b = 0 si a<= b ), et bonjour les emmerdes.

Du coup si ça avait un sens informatique évident quand on était au bit près, ou assez bas niveau (pointeurs), c'est logiquement et mathématiquement plutôt naze, les nombres non signés, sauf vraiment pour faire de l’arithmétique spécifique performante (sur les nombres premiers, la crypto, etc, etc). C'est pour ça que les langages fonctionnels n'ont généralement pas de type unsigned de base. Ils apportent beaucoup plus de problèmes que d'avantages.

Exemple : ça doit se trouver mais on va commencer bateau. On dispose d'un espace de X Mo pour écrie un fichier, on veux savoir si il y assez de place... ( x - taille fichier ) > 0 ? Bha non tu peux pas le faire sans erreur. Bha ( x > taille fichier ) ? ça revient à faire la chose précédente mais on compte sur le compilo, processeur, etc, pour te sortir de la merde et hacker la difficulté. Si on veut rester cohérent et type-propre, il faudrait donc une fonction d'ordre spécifique, ça existe sur les entiers naturels, mais bon c'est relou à implémenter sans faire appel aux entiers relatifs.
Je ne parle pas du jour où, muni de la soustraction dégueu, tu veux faire (a-b)+c et que tu te rends compte que (a-b)+c != c+a-b, que tu casses ton ordi et changes de métier.
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

2445

Tiens en plus d’être expert en sciences politique tu es expert en sciences informatique. Bien!

Le débat est de toutes manière complètement foireux parce que signe ou pas, on ne fait que déporter le problème.

Entier 8 bit (c'est plus simple) :

Signe: -128 a +127
Non signé: +0 a +255

Certain râlent parce que dans le monde non signé "0 - 1" donne 255 et pas un nombre negatif,
Mais si on fait -128 - 1 dans le monde signé il se passe quoi a votre avis?
Oui on va obtenir +127

Hummm

Bref c'est complètement idiot comme débat. On traite des nombre qui ne peuvent/doivent jamais être négatif pourquoi se limiter et utiliser un type qui gère des nombres négatif?
Sinon tant qu'a faire, autant n'utiliser que des nombres flottant tiens parce que bon dans le monde des nombres entiers, 5/2 = 2 et c'est mathématiquement faux. pourtant on utilise pas systématiquement des flottant.

J'entends "oui mais comment on fait pour savoir que la soustraction qu'on a fait la elle fait un caca parce que passé en dessous de zero" ?
Creuse toi un peu les méninge je te répondrais, la solution est extrêmement simple:

pour l'operation a = a - b:

if (b > a) { a = a - b; } else { raiseWarning("a - b goes negative, caping at 0"); a = 0; }
Mais dans ce cas, que les nombres soient signé ou non il faut aussi faire des vérifications qu'on ne wrappe pas (les operation type -128 - 1, +127 + 1, etc..)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2446

very, tu devrais essayer la soustraction alternative, elle marche a tous les coups.

2447

Very > mais c'est simplement que l'addition n'est pas une opération interne : tu ajoutes un offset (négatif ou positif) à une adresse ; un peu comme les dates : tu as "datetime + timedelta => datetime", "datetime - datetime => timedelta", ...
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2448

de toutes facons, toutes les opérations informatiques sont définies modulo 2^(nb de bits du résultat), alors ca sert a rien de se toucher la nouille pour des trucs qui existent pas ^^

2449

very (./2444) :
Sauf que, contrairement au nombres signés, c'est un espace qui pu un peu beaucoup, où la soustraction est très problématique, donc par exemple on ne peut pas résoudre systématiquement dans l'espace une équation de premier degré ( 5x+142=0), etc. Bref même pas un corps.
Les nombres signés et non signés sont des représentants du même anneau ℤ/28×2ⁿℤ. Cet anneau n'est pas un corps parce que 28×2ⁿ n'est pas premier. Mais on s'en fout.

Ce que tu veux dire, c'est que les nombres non signés ne seraient pas un groupe additif, ce qui est vrai si on considère le vrai ℕ, mais les ordinateurs ne travaillent pas avec ℕ ni ℤ, mais toujours avec un anneau fini ℤ/28×2ⁿℤ. Et là, la soustraction est très bien définie. (On est dans un anneau, qui est donc entre autre un groupe additif.)

Du coup la sureté des opérations instables (soustraction) dépend non pas du type, mais de la valeur des variables : (a-b) appartient à |N ssi a>=b, ce qu'il est impossible de savoir à la compilation. Du coup :

-soit on accepte la soustraction, et on a un type qui suxe totalement, instable
-soit on refuse la soustraction.
-soit on accepte la soustraction en castant vers les entiers relatifs (au moins dans certains cas), c'est mathématiquement bien pus logique mais ça casse presque tout l'intérêt d'utiliser des nombres non signés.
-soit on fait une soustraction complétement dégueu (où a-b = 0 si a<= b ), et bonjour les emmerdes.
On fait évidemment la chose la mieux définie: on soustrait dans ℤ/28×2ⁿℤ. (D'ailleurs, les standards C et C++ ne définissent ça que pour les nombres non signés. Si ton addition ou soustraction signée déborde, le résultat est totalement indéfini et le compilateur peut même générer du code qui formate ton disque dur!)

Exemple : ça doit se trouver mais on va commencer bateau. On dispose d'un espace de X Mo pour écrie un fichier, on veux savoir si il y assez de place... ( x - taille fichier ) > 0 ? Bha non tu peux pas le faire sans erreur. Bha ( x > taille fichier ) ? ça revient à faire la chose précédente mais on compte sur le compilo, processeur, etc, pour te sortir de la merde et hacker la difficulté.
Bah non. x > taille fichier n'est pas la même chose que ( x - taille fichier ) > 0 dans ℤ/28×2ⁿℤ (avec la relation d'ordre induite par le représentant principal non signé de chaque classe d'équivalence). Et tout le monde écrit intuitivement la première version, qui est la bonne.

Si on veut rester cohérent et type-propre, il faudrait donc une fonction d'ordre spécifique, ça existe sur les entiers naturels, mais bon c'est relou à implémenter sans faire appel aux entiers relatifs.
La fonction d'ordre est toute simple, et c'est évidemment comme ça que c'est implémenté: on prend le représentant principal non signé de chaque classe d'équivalence (donc 0 pour 0+28×2ⁿℤ, 1 pour 1+28×2ⁿℤ, …, 28×2ⁿ-1 pour 28×2ⁿ-1+28×2ⁿℤ) et on range par conséquent: 0 < 1 < 2 < … < 28×2ⁿ-1, donc 0+28×2ⁿℤ < 1+28×2ⁿℤ < 2+28×2ⁿℤ < … < 28×2ⁿ-1+28×2ⁿℤ.

Je ne parle pas du jour où, muni de la soustraction dégueu, tu veux faire (a-b)+c et que tu te rends compte que (a-b)+c != c+a-b, que tu casses ton ordi et changes de métier.
Heureusement, personne n'implémente ta "soustraction dégueu" (qui s'appelle en réalité "soustraction saturante") comme soustraction par défaut, ce serait idiot. La vraie soustraction dans ℤ/28×2ⁿℤ satisfait (a-b)+c=c+a-b.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

2450

Godzil (./2443) :
Tu m'apprends un truc grin

Je testerais ce soir tien smile
après c'est ptet limités aux OS non NT (donc jusqu'à win98)
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2451

Merci pour vos retours top
Godzil (./2438) :
VB.net et VB "classique" n'ont en commun que VB.. Porter vers .Net == réécriture complete ou presque :/
Ouais, c'est un peu le problème (du coup, pour l'instant, on fait avec cette vieille machine).

squalyl (./2441) :
dieu merci c'est du série pas du parallèle...
Pourquoi, les API pour le // ne sont pas simples à gérer ? Il faut démultiplexer à la main ?
avatar

2452

Godzil > Non, ça marche aussi sous les Windows à noyau NT. Ça marchait même sous DOS, en fait.

D'ailleurs l'ouverture "normale" d'un port de communication série sous Windows se fait avec la même fonction que pour les fichiers (CreateFile()), il y a juste des fonctions supplémentaires qui prennent le handle de fichier en paramètre pour définir les paramètres de communication, etc.

Ceci dit, toutes les opérations possibles avec des fichiers ne sont pas supportées (genre le seek, qui n'a pas de sens), donc tous les programmes n'accepteront pas d'ouvrir un port de communication comme un fichier ordinaire.

Nil > je confirme ce que disent les autres, du port série en VB.net j'en ai fait y'a... pfiou, un paquet d'années, mais ça fonctionne.
Pour le port parallèle, dès que c'est autre chose qu'une imprimante, c'est la merde. Y'a pas d'API, faut accéder directement au matos et c'est problématique (faut un driver pour ça, donc soucis de signature, etc.)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2453

Nil (./2451) :
Merci pour vos retours top
Godzil (./2438) :
VB.net et VB "classique" n'ont en commun que VB.. Porter vers .Net == réécriture complete ou presque :/
Ouais, c'est un peu le problème (du coup, pour l'instant, on fait avec cette vieille machine).

squalyl (./2441) :
dieu merci c'est du série pas du parallèle...
Pourquoi, les API pour le // ne sont pas simples à gérer ? Il faut démultiplexer à la main ?
Avant NT, tu pouvais accéder directement au port // en mode buffer. (c'est comme ça que ti-drive marchait) Après NT, faut un driver "propre" et la version "officielle" du driver LPT est prévue pour traiter une imprimante avec les signaux dédiés du port //, pas pour envoyer du RAW sur les fils...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2454

Ah oui, ça a l'air mignon, ça... bon, si j'ai je dois bosser pour un périphérique //, je me ferai porter pâle :3
avatar

2455

Tût tût. Je te file ma carte de visite, et tu dis "ah malheureusement, ce n'est pas mon domaine, mais ça tombe bien, je connais un indépendant qui..." tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2456

grin je note, on ne sait jamais !
avatar

2457

@Zerosquare : tu vas devoir développer un driver port// pour windows 10 pour des machines qui elles mêmes ne sont théoriquement pas supportées cheeky
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2458

Je sais, je sais... et c'est encore rien par rapport aux conditions et délais de paiement des entités publiques... mais ça se répercute sur la facture ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2459

nil: le port parallèle maintenant s'accède donc avec un driver, ce qui veut dire autant de méthodes que de drivers // concurrents, et des performances de merde avec tous les appels emboités et le multitasking.

2460

C'est parce que votre système d'exploitation est pourri. tongue GNU/Linux gère les line disciplines en userspace depuis pas mal de temps. tongue
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité