7 ms·
Exponentiation operator gratuitous and unnecessary? WHAT?
by emilfihlman 9y ago
Exponentiation operator gratuitous and unnecessary?
WHAT?
- kragen 9y agoIt doesn't improve readability. Compare: discrim = b² - 4ac; // Standard notation float discrim = pow(b, 2) - 4*a*c; // C float discrim = b \ 2 - 4*a*c; // C∀ I would argue that these are presented here in descending order of readability. Also its typing rules are really complicated; apply it to two integers and magically you are thrown into the floating-point world where you can never be completely certain of anything, but if you use an unsigned exponent then you stay safely in integer-land.
- dom96 9y agoThe choice of operator seems very odd to me. Wouldn't `^` be significantly more readable?
- userbinator 9y ago^ is already used for bitwise xor.
- earenndil 9y agoWhat about then, like some other languages?
- kbenson 9y ago> What about then, like some other languages? I assume there's a double asterisk there, and it's being eaten by the formatter?
- earenndil 9y agoRight yes. I forgot to escape, and now it's too late to.
- Amelorate 9y agoPython uses * * , but that is ambigous with int a = 1; int *b = &a; int c = a ** b; // Am I casting b to an int (returning it's address) and exponenting it or am I derefrencing b and multiplying it's result with a?
- userbinator 9y agoI suppose ^^ might work, although a little odd because by consistency it would otherwise be the "logical XOR", a mythical operator that doesn't actually make much sense.
- poizan42 9y ago> a mythical operator that doesn't actually make much sense. Hmm I'm pretty sure practically every programming languages have it. It usually looks like "!=" or "<>". The even more obscure logical XNOR is usually denoted "==" or "="
- danharaj 9y agoNot quite..
- kazagistar 9y agoAlas, this doesn't deal with the idea of truthyness as a proper logocal XOR would, so it is incorrect in many of the most popular languages, including C, where a value that is true is not always equal to another value that is true. This only works in the much more strongly typed languages, or when you force cast both sides to a boolean with something like !!
- opejn 9y agoYes! In C its full spelling is "!a != !b".
- theOnliest 9y agoPerl has logical xor, which is occasionally useful. I usually reach for it when argument checking, where it makes sense to have either this param or that but not both.
- vanderZwan 9y agoProbably too much ambiguity with pointers
- deleted 9y ago[deleted]
- dzdt 9y agoIdiomatic C would say: float discrim = b*b - 4*a*c; Using pow for a small integer power is a no-no: less efficient and less accurate. I agree that \ is an awkward choice. A Fortran-like double asterisk ∗∗ is out because of ambiguity with pointers; single caret ^ out because it is already reserved for bitwise xor. Maybe double caret ^^ or asterisk-caret ∗^ could be used? That would read okay : double discrim = b^^2 - 4*a*c; double discrim = b*^2 - 4*a*c;
- jcelerier 9y ago> Using pow for a small integer power is a no-no: less efficient and less accurate. Using pow for a small integer power compiles into the exact same code: https://godbolt.org/g/CjoHdJ https://godbolt.org/g/CjoHdJ
- stochastic_monk 9y agoOnly for 1 or 2, unless you turn on --fast-math.
- tejasmanohar 9y agoUsing pow for a small integer power is a no-no: less efficient and less accurate. I think you missed the point.
- deleted 9y ago[deleted]