Op 16 mrt. 2012 07:32 schreef "Jim Michaels" <[email protected]> het
volgende:
>
> I didn't use an int.  take a look.
> an int shouldn't even BE IN there.  if anything, one should think you
convert to
>
> the compiler should know to convert everything at least to the return or
assign type I should think. the data type should not be hard to detect by
the parser.
> I hope someone makes that a feature someday.

I hope not, it would lead to even more non standard code and surprise
people who actually know the language they are using.

> for instance,
>
> int = short*char*short;
> //I think should be compiled as
> int=int*int*int;
> return short*char*short;
> //that returns an int should be compiled as
> return int*int*int;

This is what happens, but the result of the multiplication is larger than
an int,  so it overflows. If this function returns an int,  there is no
chance of not overflowing with your previously mentioned values.

>
>
> this is what I mean. as simple as that. I should have given examples.
>
> *If* I am assigning an int but the calculations require an int64_t
temporarily (which is what I think you are describing), then I already know
I need to do the conversions myself manually:
>
>
int=static_cast<int64_t>(char)*static_cast<int64_t>(short)*static_cast<int64_t>(int);
>
>
> but where that int is coming from, I have no clue.  I hope it's not in
the standard, because it's messing me up.  maybe it's a compiler bug.

It is, it has been for literally decades. Read up on it. Stackoverflow.com
is a great place to start.

>
> If this *is* a compiler bug, I would like to see it fixed.  if this is an
oversight in the c and c++ language standard, I would like to see *that*
fixed.  I don't think a change like that would do any harm.  I think it
would improve code reliability.  people assume a lot of things that aren't
true when they say in Engineering school "all smaller number data types are
upconverted to larger number data types".  it's not true in all instances.
I would like to see a professor put this out as a programming example or
someone put this out in a "how not to program in c++" book.

This will be mentioned in any decent c or c++ book. Stackoverflow.com has a
"definitive book list" for these languages. Google it, and stop asking
off-topic questions on this mailing list. GCC nor MinGW-w64 is as buggy as
you seem to think.

Ruben

>
>
>> ________________________________
>> From: Martin Mitáš <[email protected]>
>> To: [email protected]
>> Sent: Thursday, March 15, 2012 12:57 AM
>> Subject: Re: [Mingw-w64-public] bug: conversion of integers and other
numbers not there
>>
>>
>> It works correctly, because sizeof(int) == 4 and 125000000000
>> is too big for 32 bits. If you take the least significant four bytes
>> of that value, you get (what a surprise) exactly 445948416.
>>
>> The three vars are expanded from short to int and multiplicated
>> (still into an int), then the result is expanded to uint64_t by the
>> assignement, but it is already too late.
>>
>> Use this instead:
>> uint64_t n = (uint64_t) cyl * head * sector;
>>
>> Regards,
>> Mity
>>
>>
>> Dne 15.3.2012 0:15, Jim Michaels napsal(a):
>>>
>>> bug: conversion of integers and other numbers not there.
>>> #include <iostream>
>>> #include <tr1/stdint.h>
>>> using namespace std;
>>> int main(void) {
>>>     unsigned short cyl=5000, head=5000, sector=5000;
>>>     uint64_t n=cyl * head * sector; //result should be
>>>     cout<<"result should be 125000000000:="<<n<<endl;
>>>     return 0;
>>> }
>>> /*
>>> Wed 03/14/2012 16:10:39.73|C:\prj\test\mingw-w64\conversion|>c
>>> result should be 125000000000:=445948416
>>>
>>> Wed 03/14/2012 16:10:46.90|C:\prj\test\mingw-w64\conversion|>
>>> */
>>>
>>> remember in engineering school they told us the compiler will convert
all shorts to ints, etc, yada yada?
>>> well, this doesn't work in gcc.
>>> I have tried this both with mingw, mingw-w64, and djgpp.
>>> you can try this with 20111127 auto build if you like.
>>>
>>>
>>> -------------
>>> Jim Michaels
>>> [email protected]
>>> [email protected]
>>> http://JimsComputerRepairandWebDesign.com
>>> http://JesusnJim.com (my personal site, has software)
>>> ---
>>> Computer memory measurements, SSD measurements, microsoft disk size
measurements (note: they will say GB or MB or KB or TB when it is not!):
>>> [KiB] [MiB] [GiB] [TiB]
>>> [2^10B=1,024B=1KiB]
>>> [2^20B=1,048,576B=1MiB]
>>> [2^30B=1,073,741,824B=1GiB]
>>> [2^40B=1,099,511,627,776B=1TiB]
>>> hard disk industry disk size measurements:
>>> [KB] [MB] [GB] [TB]
>>> [10^3B=1,000B=1KB]
>>> [10^6B=1,000,000B=1MB]
>>> [10^9B=1,000,000,000B=1GB]
>>> [10^12B=1,000,000,000,000B=1TB]
>>>
>>>
>>>
>>>
>>>
------------------------------------------------------------------------------
>>> Virtualization & Cloud Management Using Capacity Planning
>>> Cloud computing makes use of virtualization - but cloud computing
>>> also focuses on allowing computing to be delivered as a service.
>>> http://www.accelacomm.com/jaw/sfnl/114/51521223/
>>>
>>>
>>>
>>> _______________________________________________
>>> Mingw-w64-public mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>>
>>
>>
------------------------------------------------------------------------------
>> This SF email is sponsosred by:
>> Try Windows Azure free for 90 days Click Here
>> http://p.sf.net/sfu/sfd2d-msazure
>>
>> _______________________________________________
>> Mingw-w64-public mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>>
>>
>
>
------------------------------------------------------------------------------
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here
> http://p.sf.net/sfu/sfd2d-msazure
> _______________________________________________
> Mingw-w64-public mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to