From: "A. Sinan Unur" Newsgroups: comp.os.msdos.djgpp Subject: Re: C preprocessor not capable of floating point division ? Date: 21 Dec 2002 04:59:42 GMT Organization: Cornell University Lines: 77 Sender: asu1 AT cornell DOT invalid (on pool-141-149-208-78.syr.east.verizon.net) Message-ID: References: NNTP-Posting-Host: pool-141-149-208-78.syr.east.verizon.net X-Trace: news01.cit.cornell.edu 1040446782 14579 141.149.208.78 (21 Dec 2002 04:59:42 GMT) X-Complaints-To: usenet AT news01 DOT cit DOT cornell DOT edu NNTP-Posting-Date: 21 Dec 2002 04:59:42 GMT User-Agent: Xnews/5.04.25 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com "Lars O. Hansen" wrote in news:au0s1n$hqn$1 AT news DOT online DOT de: >> how do you propose to store 0.5 in an integer? >> >> > How can I achieve floating point division or similar having the >> > same result by the C preprocessor for #define d values ? >> >> you'll have to clarify what you are trying to do. > > it should have been float a=2/sth. > > But DJ Delorie is right, the preprocessor or compiler which does > expression evaluation beforehand "obeyes" the rules of x86 "integer > division", so 4/8 is 0. the preprocessor does simple text substitution: C:\Dload\misc>cat fff.c #define STH 8 float a = 2/STH; C:\Dload\misc>gcc -E fff.c # 1 "fff.c" # 1 "" # 1 "" # 1 "c:/djgpp/lib/gcc-lib/djgpp/3.21/djgpp.ver" 1 # 1 "c:/djgpp/include/sys/version.h" 1 3 # 2 "c:/djgpp/lib/gcc-lib/djgpp/3.21/djgpp.ver" 2 # 2 "" 2 # 1 "fff.c" float a = 2/8; OTOH, the compiler, upon finding a constant expression, initializes a with the value of the expression C:\Dload\misc>gcc -S fff.c C:\Dload\misc>cat fff.s .file "fff.c" .globl _a .section .data .p2align 2 _a: .long 0 .ident "GCC: (GNU) 3.2.1" if you change the code to: C:\Dload\misc>cat fff.c #define STH 8 float a = 2.0/STH; then you'll get: C:\Dload\misc>gcc -S fff.c C:\Dload\misc>cat fff.s .file "fff.c" .globl _a .section .data .p2align 2 _a: .long 1048576000 .ident "GCC: (GNU) 3.2.1" where 1048576000 is the float representation of 0.5. -- A. Sinan Unur asu1 AT c-o-r-n-e-l-l DOT edu Remove dashes for address Spam bait: mailto:uce AT ftc DOT gov