Hayır, dngülerde veya kodlarda sorun yok. Sorun kayan nokta değişkenlerinin karşılaştırılmasıyla alakalı. Linuxde denemedim açıkcası ama VB6, Delphi veya VC++ sonuç değişmiyor. Debug penceresinde değişken 4.0 değerini almasına rağmen eşitliği sağlamıyor. Peki ama Neden?

Private Sub Command1_Click Dim x As Doublex = 0Do Until x = 4x = x + 0.2Debug. Print xLoopEnd Subx = 0 dan 0.2 lik atışla artıyor. x = 4 olduğu zaman dngünün bitmesi gerektiği halde sonsuza gidiyor. Hata nerede veya kimde?

walla sebebini bulmaya hiç kasamıcam pratik düşünPrivate Sub Command1_Click Dim x As Doublex = 0Do Until CStr = "4"x = x + 0.2Debug. Print xLoopEnd Subyap olsun bitsin xi yakalayamıo nedense double olarak artış yaparken bşeyler oluo sanırım ama çzemicem şu saat itibariyle :)

bak simdi arkadasim.. ben delphi bilmem.. c++ ile ilgili olan code hakkinda yorum yapayim.. "neden?" sorusunun cevabi senin while dngünde.. "while( a!= 4.0 ) " while dngüsü karsilastirma sonucunda "1" yada "true" alinca dner durur.. senin burda yazdigin code yalnizca bir kere "false" oluyor.. dogal olarak alet "4.0" dan sonra devam ediyor hesaplamaya.. genel anlamda bir hata durumu daha var.. "type" sorunu.. eger sen "a" yi integer tanimlarsan sorun yok.. ama "double" yada "float" tanimladiginda.. bunlarin tasiyabilecegi degerlerle ilgili sorun olabilir.. ama burda o durumda yok..(anlatmak istedigim su.. eger "int" ise "1" den sonra "2" gelir.. ama "float" oldugunda "1"den sonra "1,1" yada "1,000000000000001" de gelebilir..)hadi kolay gele.. Was mich nicht umbringt, macht mich strker! Nietzsche

:0,2 değerini bi sayıya ataa=0.2x=x+aGüzel ama dngüden yinede çıkmaz. İstediğiniz dngüyü kullanın sonuç değişmeyecektir. Hatta farklı diller kullansanızda sorun aynı, VC++ kodu ;#include <iostream. h> int main { double a = 0; while( a!= 4.0 ) return 0; } String e dnüştürme güzel ama bunu her zaman kullanamayız ve uygulamayı çok yorar . Peki kodda hata olmadığına gre bu nasıl oluyor, başka yorumu olna arkadaş var mı?

bu kodun IEEE bilmem kaç floating point zımbırtısı ile alakası var ise sanırım sadece scheme lisp ile doğru sonucu veriri. orneğin 1.0-0.1-0.9 tum dillerde bu hatayı verir. ama nedense scheme lisp te 0 veriyor. ftw

: bak simdi arkadasim.. ben delphi bilmem.. c++ ile ilgili olan code hakkinda yorum yapayim.. "neden?" sorusunun cevabi senin while dngünde.. "while( a!= 4.0 ) " while dngüsü karsilastirma sonucunda "1" yada "true" alinca dner durur.. senin burda yazdigin code yalnizca bir kere "false" oluyor.. dogal olarak alet "4.0" dan sonra devam ediyor hesaplamaya.. genel anlamda bir hata durumu daha var.. "type" sorunu.. eger sen "a" yi integer tanimlarsan sorun yok.. ama "double" yada "float" tanimladiginda.. bunlarin tasiyabilecegi degerlerle ilgili sorun olabilir.. ama burda o durumda yok..(anlatmak istedigim su.. eger "int" ise "1" den sonra "2" gelir.. ama "float" oldugunda "1"den sonra "1,1" yada "1,000000000000001" de gelebilir..) hadi kolay gele.. Kardeş sen esas konuyu atladım, farklı konuya takıldın ama cevap vereyim. while( a!= 4.0 ) anlamı a, 4 olmadığı sürece demektir. Yani a=4 olmadığı sürece dngüyü çalıştır, a=4 olunca dngüyü durdur demektir. Yani kodda hata yok. İkinci olarak "ama "float" oldugunda "1"den sonra "1,1" yada "1,000000000000001" de gelebilir.." kelimesi anlamsız çünkü debug penceresinde bakarsan sayı 0 - 0.2 - 0.4 - 0.6... olarak 0.2 değerlerle artıyor ve 4.0 değerinide gayet net şekilde alıyor ama dngü durmuyor. Konunun C++ ile alakası yok hepsinde aynı şekilde davranıyor. Sorun kayan nokta değişkenlerinin karşılaştırılmasıyla alakalı hala...

Evet, uzun zaman oldu bu soruyu soralı... Sanırım eskiden kalma 3-4 byle güzel sorum vardı. Fazla ilgi olmadığı için artıkda sormuyorum zaten. Forum artık programcılık, hack falan olmaktan çıktı iyice doğuhan gibi dallamalar yüzünden geyiğe dndü. Artık foruma yorum yazarken bile üşenmeye başladım. Tahribat forum nereye gidiyor, artık sadece t-shirt ve gnr gibi konular mı hit alacak merak ediyorum.

yanlış hatırlamıyorsam IEEE standard 754 Binary Floating-Point Arithmetic hatasından kaynaklanan durum nedeniyle1.0-0.1-0.9 işlemini hangi dille yapıyor olursanız olun sonuç olarak-2.7755575615628914e-17verir. Eğer yazdığın kodda bu hesaplama hatasına düşüyor ise sonucu bulamıyor olabilir. ftw

#include <iostream>using namespace std;int main { double a = 0; while( a <= 4.0 ) return 0;}bak byle yapinca calisiyor:) " while( a!= 4.0 ) " burda düsünme hatasi yapmissin.. sonsuz dngüye neden olan bu.. yani yalnizca "a=4.0"i yazma digerleri yaz gibi birsey olmus.. hadi kolay gele.. Was mich nicht umbringt, macht mich strker! Nietzsche

cukurova dedi kiForum artık programcılık, hack falan olmaktan çıktı iyice doğuhan gibi dallamalar yüzünden geyiğe dndü. Artık foruma yorum yazarken bile üşenmeye başladımayıp olmasın hocam napalım çzemedik senin dngüyü ama ilginç harbiden de olmuyor eksik bişi var.. Ben Kapitalizmim ve bankacılar benim evlatlarım.

Toplama ve. olduğundan dolayı algoritmada ve programlarda hata verebilir... Şlye bi denesene0,2 değerini bi sayıya ataa=0.2x=x+aBirde print x yaptığında x in 4 olduğu grülüyormu? o nemli belki mantıksal bir hatadan dolayı tam olarak 4 çıkmıyordur.. Bu arada dahada kolay var.. x = 0Do Until x = 20x = x + 1Debug. Print xLoop:) Sanıyorum kendi ataszümü yaptım, kaynak belirterek kullanabilirsiniz. 10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Not : Syleyeni belli olduğu için ataszü değil, zlüsz oluyormuş, dolayısı ile kendi zlüszümü yapmış oldum :)

delphi ile bende denedim dediğin gibi sonsuza gidiyor yada ben yanlış yapmış olabilirim delphi de yapan olursa yazsın merak ettimprocedure TForm1. Button1Click ;var x:extended;beginx:=0;repeatx:=x+0.2;until x=4;edit1. Text:=floattostr ;end;ben byle yaptım ama sonuç yok acayip... Son Of OTTOMAN Empire

testtest Sanıyorum kendi ataszümü yaptım, kaynak belirterek kullanabilirsiniz. 10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Not : Syleyeni belli olduğu için ataszü değil, zlüsz oluyormuş, dolayısı ile kendi zlüszümü yapmış oldum :)

bu kodun IEEE bilmem kaç floating point zımbırtısı ile alakası var ise sanırım sadece scheme lisp ile doğru sonucu veriri. Abi ne dedin, bu nasıl bir cümle hiç birşey anlamadım. Şunu adam gibi anlatta bizde bilelim.