Results 1 to 7 of 7
http://idgs.in/62240
  1. #1
    zanbatos's Avatar
    Join Date
    Feb 2007
    Location
    Jakarta
    Posts
    1,225
    Points
    506.70
    Thanks: 1 / 1 / 1

    Default [ASK] Program Bugs atau Mesin Bugs ?

    saya misalkan mempunyai source code seperti ini (algoritmanya saja)

    Code:
    $var1 = 0.6;
    $var2 = 14.5 + 0.6 - 14.5;
    if($var1 == $var2) { 
          print("Nilai sama\n");
          print("Nilai var 1 = $var1, Nilai var2 = $var2\n");
    } else {
          print("Nilai berbeda\n");
          print("Nilai var 1 = $var1, Nilai var2 = $var2\n");
    }
    hasil yang dikeluarkan adalah :
    Nilai berbeda
    Nilai var1 = 0.6, Nilai var2 = 0.6
    Ada yang bisa memberikan penjelasan ?

  2. Hot Ad
  3. #2
    zagayo's Avatar
    Join Date
    Nov 2007
    Location
    jakarta now..
    Posts
    114
    Points
    241.40
    Thanks: 0 / 0 / 0

    Default

    Quote Originally Posted by zanbatos View Post
    saya misalkan mempunyai source code seperti ini (algoritmanya saja)

    Code:
    $var1 = 0.6;
    $var2 = 14.5 + 0.6 - 14.5;
    if($var1 == $var2) { 
          print("Nilai sama\n");
          print("Nilai var 1 = $var1, Nilai var2 = $var2\n");
    } else {
          print("Nilai berbeda\n");
          print("Nilai var 1 = $var1, Nilai var2 = $var2\n");
    }
    hasil yang dikeluarkan adalah :


    Ada yang bisa memberikan penjelasan ?
    klo ga salah $ merujuk bukan pada nilai var tersebut tp pada alamat .. CMIIW
    dan pada bagian "$var1 == $var2" tentu saja alamat var1 dan var2 berbeda walau nilai nya sama..
    oleh karna itu hasil yg keluar adalah "Nilai berbeda" karena perintah yg dijalankan adalah perintah "else"

    CMIIW.. ^^

  4. #3
    zanbatos's Avatar
    Join Date
    Feb 2007
    Location
    Jakarta
    Posts
    1,225
    Points
    506.70
    Thanks: 1 / 1 / 1

    Default

    Quote Originally Posted by zagayo View Post
    klo ga salah $ merujuk bukan pada nilai var tersebut tp pada alamat .. CMIIW
    dan pada bagian "$var1 == $var2" tentu saja alamat var1 dan var2 berbeda walau nilai nya sama..
    oleh karna itu hasil yg keluar adalah "Nilai berbeda" karena perintah yg dijalankan adalah perintah "else"

    CMIIW.. ^^
    tanda $ menunjukkan variabel skalar biasa bukan alamat

  5. #4
    trogdor's Avatar
    Join Date
    Nov 2006
    Location
    Lake Tit-i-Caca
    Posts
    434
    Points
    506.90
    Thanks: 0 / 0 / 0

    Default

    Hmmm... itu PHP ya? $ = prefix untuk variable.

    Tipe data float memang sering bermasalah dalam hal akurasi. Bisa jadi (x + y) + z != x + (y + z). Dan itu bukan di PHP saja kok, di bahasa lain seperti C juga banyak kasus seperti itu.

    Untuk kasus zanbatos, masalahnya adalah hidden precision, salah satu work aroundnya bisa ditambahkan pembulatan sampai ke-n dibelakang koma dimana n adalah angka dibelakang koma yang terakhir.

    Supaya $var1 == $var2, bisa ditambahkan:

    Code:
    $var1 = 0.6;
    $var2 = 14.5 + 0.6 - 14.5;
    if(round($var1, 1) == round($var2, 1)) { 
          print("Nilai sama\n");
          print("Nilai var 1 = $var1, Nilai var2 = $var2\n");
    } else {
          print("Nilai berbeda\n");
          print("Nilai var 1 = $var1, Nilai var2 = $var2\n");
    }
    Yang hasilnya adalah:
    Nilai sama
    Nilai var 1 = 0.6, Nilai var2 = 0.6
    DISCLAIMER
    By reading my post, you agree to this disclaimer regardless of anything. You also agree that my views and opinions are always right and you are always wrong. This disclaimer supersedes anything, even if your whatever says it supersedes mine, mine still supersedes yours. Any complain should be sent to trogdor[at]rekrfeht[dot]com which does not exist. Even if it does, I still will not read your mail. Instead, it will be automatically redirected to /dev/null.


    And... following the recent trend:
    http://www.speedtest.net/result/342496256.png

  6. #5
    zanbatos's Avatar
    Join Date
    Feb 2007
    Location
    Jakarta
    Posts
    1,225
    Points
    506.70
    Thanks: 1 / 1 / 1

    Default

    itu sebenarnya bukan bahasa PHP tetapi Perl (Practical Extraction and Reporting Language)

    dan lagi fungsi round gk ada di Perl (mungkin dideskripsikan kedalam yg lain)

    tapi bukankah round itu membulatkan keatas ... yang artinya sama dengan fungsi
    int() + 1

    tapi penjelasannya sudah paham, terima kasih buat kak trogdor

  7. #6
    trogdor's Avatar
    Join Date
    Nov 2006
    Location
    Lake Tit-i-Caca
    Posts
    434
    Points
    506.90
    Thanks: 0 / 0 / 0

    Default

    Iya, perl emang ga ada built-in function untuk round().
    round() kalo di PHP bisa ga jadi int kok, argumen kedua itu untuk menentukan jumlah angka dibelakang koma. Contoh:
    Code:
    echo round(1.111, 1);
    Hasilnya:
    1,1
    DISCLAIMER
    By reading my post, you agree to this disclaimer regardless of anything. You also agree that my views and opinions are always right and you are always wrong. This disclaimer supersedes anything, even if your whatever says it supersedes mine, mine still supersedes yours. Any complain should be sent to trogdor[at]rekrfeht[dot]com which does not exist. Even if it does, I still will not read your mail. Instead, it will be automatically redirected to /dev/null.


    And... following the recent trend:
    http://www.speedtest.net/result/342496256.png

  8. #7
    Computer-Freakz's Avatar
    Join Date
    Oct 2007
    Posts
    69
    Points
    78.10
    Thanks: 0 / 0 / 0

    Default

    Wuihhhh keren keren keren !

    kk trogdor & zanbatos boleh nih kalo ada masalah programing minta bantuan ya ??

    ^ ^

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •