Itu semua dilakukan pada waktu kompilasi. Kode berikut...
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
float foo = 3.40282347E+38;
float bar = 3.40282347e38;
printf("foo=%g\nbar=%g\n", foo, bar);
return 0;
}
Menghasilkan ini di assembler. Untuk mendapatkan assembler gunakan flag -S
ke gcc yaitu, kira-kira
gcc -S -Wall -O3 -pedantic -std=c11 scientific_notation.c
Ini menggunakan dentang. Saya akan memotong assemblernya sedikit...
.section __TEXT,__text,regular,pure_instructions
.macosx_version_min 10, 11
.section __TEXT,__literal8,8byte_literals
.align 3
LCPI0_0:
.quad 5183643170566569984 ## double 3.4028234663852886E+38
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
... terpotong.
Perhatikan baris ini .quad 5183643170566569984
. Itu adalah sebuah konstanta. Perhatikan juga bahwa meskipun saya memiliki dua konstanta ini dalam kode saya, hanya satu yang dibutuhkan oleh kompiler.
person
Harry
schedule
12.04.2016
FLT_MAX
daripada konstanta hard-coded. - person Paul R   schedule 12.04.2016float.h
... peraturan aneh untuk pekerjaan rumah ini terkadang membuat saya mempertanyakan pendidikan yang sedang berlangsung... Saya dapat memahami bahwa menyuruh orang untuk tidak menyertakan<unordered_map>
jika tugasnya adalah menerapkan tabel hash, tetapi ini konyol. - person Dietrich Epp   schedule 12.04.2016