|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Has anybody ever seen a thing like this?
### code: double link_bw_cost(int a, int b){ double ro; ro = ( (double) link_usage[a][b].bandw / (double) link[a][b].bandw); printf("DEBUG - a = %d e b = %d\n", a, b); printf("DEBUG - link_usage[%d][%d].bandw = %ld link[%d][%d].bandw = %ld \n", a, b, link_usage[a][b].bandw, a, b, link[a][b].bandw); ### when running: DEBUG - a = 0 e b = 2 DEBUG - link_usage[0][2].bandw = 0 link[1078689792][0].bandw = 2 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
In article <1192748632.436515.173000@q5g2000prf.googlegroups. com>,
<estantep@gmail.com> wrote: >Has anybody ever seen a thing like this? >### code: >double link_bw_cost(int a, int b){ > double ro; > ro = ( (double) link_usage[a][b].bandw / (double) link[a][b].bandw); >printf("DEBUG - a = %d e b = %d\n", a, b); >printf("DEBUG - link_usage[%d][%d].bandw = %ld link[%d][%d].bandw >= %ld \n", a, b, link_usage[a][b].bandw, a, b, link[a][b].bandw); >### when running: >DEBUG - a = 0 e b = 2 >DEBUG - link_usage[0][2].bandw = 0 link[1078689792][0].bandw = 2 Yes, I've seen things like that when link_usage[a][b].bandw is wider than a long (%ld). You didn't happen to supply us with the structure definition, so we can't tell for sure. -- "I will speculate that [...] applications [...] could actually see a performance boost for most users by going dual-core [...] because it is running the adware and spyware that [...] are otherwise slowing down the single CPU that user has today" -- Herb Sutter |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Bingo!
The structure member was re-defined from long int to double. Thank you very much Walter! On Oct 18, 8:55 pm, rober...@ibd.nrc-cnrc.gc.ca (Walter Roberson) wrote: > In article <1192748632.436515.173...@q5g2000prf.googlegroups. com>, > > <estan...@gmail.com> wrote: > >Has anybody ever seen a thing like this? > >### code: > >double link_bw_cost(int a, int b){ > > double ro; > > ro = ( (double) link_usage[a][b].bandw / (double) link[a][b].bandw); > >printf("DEBUG - a = %d e b = %d\n", a, b); > >printf("DEBUG - link_usage[%d][%d].bandw = %ld link[%d][%d].bandw > >= %ld \n", a, b, link_usage[a][b].bandw, a, b, link[a][b].bandw); > >### when running: > >DEBUG - a = 0 e b = 2 > >DEBUG - link_usage[0][2].bandw = 0 link[1078689792][0].bandw = 2 > > Yes, I've seen things like that when link_usage[a][b].bandw is wider > than a long (%ld). You didn't happen to supply us with the structure > definition, so we can't tell for sure. > > -- > "I will speculate that [...] applications [...] could actually see a > performance boost for most users by going dual-core [...] because it > is running the adware and spyware that [...] are otherwise slowing > down the single CPU that user has today" -- Herb Sutter |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
estantep@gmail.com writes:
> Has anybody ever seen a thing like this? > > ### code: > > double link_bw_cost(int a, int b){ > > double ro; > > ro = ( (double) link_usage[a][b].bandw / (double) link[a][b].bandw); > > printf("DEBUG - a = %d e b = %d\n", a, b); > printf("DEBUG - link_usage[%d][%d].bandw = %ld link[%d][%d].bandw > = %ld \n", a, b, link_usage[a][b].bandw, a, b, link[a][b].bandw); > > > ### when running: > > DEBUG - a = 0 e b = 2 > DEBUG - link_usage[0][2].bandw = 0 link[1078689792][0].bandw = 2 It's ful to tell us what you think is wrong with the output, though it's obvious enough in this case (the value of ``a'' is shown as 0 and as 1078689792 in the same printf call). Here's the final printf statement reformatted with comments added; the comments indicate which format specifier is used for each argument. printf("DEBUG - link_usage[%d][%d].bandw = %ld " "link[%d][%d].bandw = %ld \n", a, /* %d */ b, /* %d */ link_usage[a][b].bandw, /* %ld */ a, /* %d */ b, /* %d */ link[a][b].bandw); /* %ld */ We know that a and b are of type int, but we don't know the type of bandw. (I'm assuming that link_usage[a][b] and link[a][b] are of the same type, and therefore that both bandw are of the same type, but I can't even be sure of that.) The printf statement assumes that bandw is of type long int. The most likely explanation for the misbehavior is that bandw is actually of some other type. Using an incorrect printf format causes undefined behavior. -- Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst> San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst> "We must do something. This is something. Therefore, we must do this." -- Antony Jay and Jonathan Lynn, "Yes Minister" |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
estantep@gmail.com wrote:
> Bingo! Please don't top-post. Your replies belong following or interspersed with properly trimmed quotes. See the majority of other posts in the newsgroup, or: <http://www.caliburn.nl/topposting.html> |
|
![]() |
| Outils de la discussion | |
|
|