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 :) |
|
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 :) |
|
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 ? |
|
m4tx |
» 2013-01-18 14:50:31 Dlaczego sam nie sprawdzisz? :) Owszem, można. |
|
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? |
|
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: int main() { float f = 12.5; } 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: int main() { double f = 12.5; } 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. |
|
Berux Temat założony przez niniejszego użytkownika |
» 2013-01-18 15:11:23 Ok,dzieki. |
|
akwes |
» 2013-01-18 15:26:03 @m4tx, ten kod, który podałeś ma jaki stopnień optymalizacji? |
|
« 1 » 2 3 |