[swift-evolution] floating point numbers implicit conversion
Ted F.A. van Gaalen
tedvgiosdev at gmail.com
Mon Jun 19 14:34:29 CDT 2017
> On 19. Jun 2017, at 19:58, Stephen Canon <scanon at apple.com> wrote:
>
>> On Jun 19, 2017, at 11:46 AM, Ted F.A. van Gaalen via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>
>> var result: Float = 0.0
>> result = float * integer * uint8 + double
>> // here, all operands should be implicitly promoted to Double before the complete expression evaluation.
>
> You would have this produce different results than:
>
> let temp = float * integer * uint8
“temp” is now a Float
> result = temp + double
“temp" being implicitly converted to a Double before expression evaluation
>
(assuming the var “result” is still the Float declared in my example)
after conversion, the expression would be implicitly, type wise
float = Float( double + double)
Apart perhaps from small floating point inherent imprecision, I don’t see much difference...
am I missing something?
> That would be extremely surprising to many unsuspecting users.
>
> Don’t get me wrong; I *really want* implicit promotions (I proposed one scheme for them way back when Swift was first unveiled publicly). But there’s a lot more subtlety around them than it seems (for example the C and C++ implicit promotion rules can easily be described on a half-sheet of paper, but are the source of *innumerable* bugs). I would rather have no implicit promotions than half-baked implicit promotions.
>
I C what you mean. yes, implicit conversion can produce unexpected results, yes.
Have to be used either with common sense or a lot of debugging or both :o)
But that’s the case with many programming language features...
(no debuggers in ca 1980, IDEs are pure luxury :o)
TedvG
> – Steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170619/710e3fb7/attachment.html>
More information about the swift-evolution
mailing list