www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2002/12/21/00:00:04.3

From: "A. Sinan Unur" <asu1 AT c-o-r-n-e-l-l DOT edu>
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: <Xns92EAF41569BACasu1cornelledu@132.236.56.8>
References: <au0qd9$hkj$1 AT news DOT online DOT de> <Xns92EAF18D1776Casu1cornelledu AT 132 DOT 236 DOT 56 DOT 8> <au0s1n$hqn$1 AT news DOT online DOT de>
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" <lars DOT o DOT hansen AT gmx DOT de> 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 "<built-in>"
# 1 "<command line>"
# 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 "<command line>" 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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019