double i;
i=-0.1;
if(i==-0.1) { std::cout<<"tak";}
dlaczego nie wypisuje "tak"?
double i;
i=-0.1;
if(i==-0.1) { std::cout<<"tak";}
dlaczego nie wypisuje "tak"?
to skoro jest równe -0.1 to powinno wypisywac tak, a nie wypisuje...
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
Bardzo proszę ;) Wszystko elegancko wyjaśnione.
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.
pics or didn't happen.
#include <iostream>
using namespace std;
int main()
{
double i;
i=-0.1;
if(i==-0.1) { std::cout<<"tak";}
}
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++ 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
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.
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";
}
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.