Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Symfonia C++ - zmiana typu stałej dosłownej z float na float

Ostatnio zmodyfikowano 2013-01-18 21:30
Autor Wiadomość
Berux
Temat założony przez niniejszego użytkownika
Symfonia C++ - zmiana typu stałej dosłownej z float na float
» 2013-01-18 14:35:50
Ostatnio czytałem Symfonię i zauważyłem coś takiego:
float x = 12.5F

Może po prostu nie rozumiem o co chodzi, ale nie wiem po co zmieniać stałą dosłowną typu 
float
 na
F
 czyli
float
. Proszę o naprowadzenie i z góry dzięki :)
P-74274
m4tx
» 2013-01-18 14:45:54
To są tzw. literały. Poczytaj sobie o nich.
Generalnie w tym przypadku to nie ma jakiegoś wielkiego znaczenia. Z
F
 czy bez - program się kompiluje :)
P-74275
Berux
Temat założony przez niniejszego użytkownika
» 2013-01-18 14:49:32
a można zrobić coś takiego:

double x = 1.203F
?
P-74276
m4tx
» 2013-01-18 14:50:31
Dlaczego sam nie sprawdzisz? :) Owszem, można.
P-74277
Berux
Temat założony przez niniejszego użytkownika
» 2013-01-18 14:52:33
Sory, że nie sprawdziłem. Czyli to będzie konwersja z double do float, tak?
P-74278
m4tx
» 2013-01-18 14:58:35
Y... jak już, to odwrotnie. (przynajmniej jeśli mówisz o ostatnim kodzie, który dałeś)

Sprawdziłem to jednak w praktyce:
C/C++
int main() {
    float f = 12.5;
}
C/C++
int main() {
    float f = 12.5f;
}
Oba te kody dają ten sam kod asemblera:
.file "wtf.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl .LC0(%rip), %eax
movl %eax, -4(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.section .rodata
.align 4
.LC0:
.long 1095237632
.ident "GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2"
.section .note.GNU-stack,"",@progbits

Następujące kody:
C/C++
int main() {
    double f = 12.5;
}
C/C++
int main() {
    double f = 12.5f;
}
Dają nieco inny kod asemblera niż ten, co dałem wcześniej, ale oba wciąż ten sam (logiczne, w 1. przypadku mamy zmienną float, a w drugim - double):
.file "wtf.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movabsq $4623226492472524800, %rax
movq %rax, -8(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2"
.section .note.GNU-stack,"",@progbits
Wniosek? Różnicy generalnie w tym przypadku... nie ma.
P-74279
Berux
Temat założony przez niniejszego użytkownika
» 2013-01-18 15:11:23
Ok,dzieki.
P-74280
akwes
» 2013-01-18 15:26:03
@m4tx, ten kod, który podałeś ma jaki stopnień optymalizacji?
P-74284
« 1 » 2 3
  Strona 1 z 3 Następna strona