if i liczba z przecinkiem

0
double i;

i=-0.1;

if(i==-0.1) { std::cout<<"tak";}

dlaczego nie wypisuje "tak"?

0

to skoro jest równe -0.1 to powinno wypisywac tak, a nie wypisuje...

0

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

Bardzo proszę ;) Wszystko elegancko wyjaśnione.

0

Akurat tutaj nie widzę powodu, dla którego to porównanie miało by się nie udać. Literały zmiennoprzecinkowe są domyślnie double, więc obydwie liczby powinny mieć takie same bity. Oczywiście, przy zamianie double na float to porównanie się nie uda. Podaj kompilator i jego opcje.

0

pics or didn't happen.

#include <iostream>
using namespace std;

int main()
{
double i;
 
i=-0.1;
 
if(i==-0.1) { std::cout<<"tak";}
}

`C:\pp\myprogs>cl wtf.cpp /Ox /`code>
`C:\pp\myprogs>cl wtf.cpp /Ox /EHsc Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved.

wtf.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:wtf.exe
wtf.obj

C:\pp\myprogs>wtf
tak

<hr>`C:\pp\myprogs>g++ `code><hr>`C:\pp\myprogs>g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/wiktor/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --wi
th-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-r
untime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.6.2 (GCC)

C:\pp\myprogs>g++ wtf.cpp -O3 -s -o wtf.exe

C:\pp\myprogs>wtf
tak

`C:\pp\myprogs>clang++ `code>
`C:\pp\myprogs>clang++ -v clang version 3.0 (tags/RELEASE_30/final) Target: i686-pc-mingw32 Thread model: posix

C:\pp\myprogs>clang++ wtf.cpp -O3 -s -o wtf.exe

C:\pp\myprogs>wtf
tak

<hr>`C:\pp\myprogs>wcl386 wtf.c`code><hr>`C:\pp\myprogs>wcl386 wtf.cpp
Open Watcom C/C++32 Compile and Link Utility Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        wpp386 wtf.cpp
Open Watcom C++32 Optimizing Compiler Version 1.9
Portions Copyright (c) 1989-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
wtf.cpp: 11 lines, included 1800, no warnings, no errors
Code size: 30
        wlink @__wcl__.lnk
Open Watcom Linker Version 1.9
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
loading object files
searching libraries
creating a Windows NT character-mode executable

C:\pp\myprogs>wtf
tak
0

Powód przeniesienia: Wątek dotyczący podstaw
i znowu: jaka to „podstawa”? stachuuu ma jakiś konkretny (niezidentyfikowany jak na razie) problem, albo z fragmentem kodu którego nie pokazał, albo z kompilatorem.
Nie sądzę, by Microsoft, Rysiek (tm), Apple i Sybase jednocześnie się mylili.

0

Korzystam z Code::Blocks (IDE), który ma wbudowane GCC i mi działa:

#include <iostream>

using namespace std;

int main()
{
    double i = -0.1;

    if(i==-0.1)cout << "tak";
}
0

Kompilator widząc takie coś zapewne wywala wszystko i zostawia samo cout. OP musi mieć jakiś bardziej skomplikowany problem, który opisał w ten prosty sposób. Niestety za prosty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1