Pourquoi ne pas C ont unsigned flotteurs?

Je sais, la question semble étrange. Les programmeurs pensent, parfois trop. Veuillez lire ce qui suit...

En C j'utilise signed et unsigned entiers beaucoup. J'aime le fait que le compilateur me prévient si je fais les choses comme l'affectation d'un entier signé un unsigned variable. Je reçois des avertissements si je compare signé avec des entiers non signés et beaucoup beaucoup plus.

J'aime ces mises en garde. Ils m'aident à garder mon code correct.

Pourquoi n'avons-nous pas le même luxe pour les flotteurs? Une racine carrée aura certainement jamais de retour d'un nombre négatif. Il y a d'autres lieux où un négatif float valeur n'a pas de sens. Candidat parfait pour un unsigned char.

Btw - je ne suis pas vraiment envie sur le single bit supplémentaire de précision que j'ai pu obtenir en supprimant le bit de signe de la flotte. Je suis super heureuse avec floats comme ils sont maintenant. Je voudrais juste marque un flotteur non signés parfois, et obtenir le même genre de mises en garde que je reçois avec des entiers.

Je ne suis pas au courant de tout langage de programmation qui prend en charge non signé nombres à virgule flottante.

Aucune idée de pourquoi ils n'existent pas?


EDIT:

Je sais que la FPU x87 n'a pas d'instructions à traiter avec des unsigned char. Permet suffit d'utiliser la signature de flotter instructions. Utilisation abusive (par exemple aller au-dessous de zéro) pourrait être considéré comme un comportement indéterminé de la même manière que le débordement des entiers signés est pas défini.

  • Intéressant, pouvez-vous poster un exemple d'un cas où ce paramètre typage a été utile?
  • litb, a votre commentaire adressent à moi? si oui, je n'ai pas l'obtenir
  • Iraimbilanja ouais 🙂 fabs ne pouvez pas retourner un nombre négatif, car il renvoie la valeur absolue de son argument
  • La droite.je n'ai pas demander comment un hypothétique unsignedfloat pourrait aider corectness.ce que j'ai posée était la suivante:dans quelle situation avez-pipenbrinck trouver Int ce paramètre typage utile(ce qui l'amène toseek le même mécanisme pour les chars).la raison pour laquelle je demande, c'est que je trouve unsigneds tout à fait inutile en ce qui concerne typesafety
  • Il y a un unsigned micro-optimisation de point-à-plage de vérifier: ((unsigned)(p-min))<(max-min), qui a seulement une branche, mais, comme toujours, il est préférable de profil pour voir si cela aide vraiment (j'ai surtout utilisé sur 386 cœurs, donc je ne sais pas comment les Processeurs modernes face).
  • Je pense que vous demandez une analyse statique du code. Ne signifie pas qu'il doit être mis en œuvre par le système de type.
  • Coin: "Une racine carrée aura certainement jamais de retour d'un nombre négatif." est un bon math truisme, mais pas nécessairement le cas avec sqrt() dans C. 1) de Nombreuses plates-formes sqrt(-0.0) --> -0.0 un nombre négatif, en un sens, bien que n'étant pas une valeur négative. 2) sqrt(-1.0) --> la mise en œuvre définies par le comportement qui pourrait revenir à -1.0.
  • Il n'a pas vraiment faire une différence sur la base de ce que vous demandez. parce que dans la plupart des cas, il y a une erreur d'exécution, de sorte que le compilateur ne pas l'attraper, et vous devez les vérifier de toute façon. vraiment je ne vois pas comment cela aide avec n'importe quoi. signé flotteurs de ne pas faire trop de différence à mon avis.