[問題] DEV C++的計算問題...

看板C_and_CPP作者 (隨風而逝的是一份真)時間11年前 (2014/02/09 22:57), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/1
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { float ch=240; float ch1; ch1=ch/7; printf("%f\n",ch1); system("pause"); return 0; } 這是一段很簡單的小程式,計算240/7 得到答案是34.285713 BUT,不管我用其他什麼工具算出來 240/7=34.28571428571429 也就是說240/7=34.285714~34.285715 怎麼程式會秀出713哩? 有請各位前輩告訴我一下問題所在.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.140.207

02/09 22:59, , 1F
顯示位數問題
02/09 22:59, 1F

02/09 22:59, , 2F
把 float 宣告改成 double 試試。
02/09 22:59, 2F

02/09 23:00, , 3F
float 準確位數換算成十進位大約只有七八位左右
02/09 23:00, 3F
我知道改成double後可以正確算出來, 可是不能理解最後一位為何會算出3, 不知是如何演算出來的? 會是以16進位計算後轉換為10進位所造成的誤差嗎? 這是我想到的可能性,不知道是不是有其他可能? ※ 編輯: storypp 來自: 114.33.140.207 (02/09 23:06)

02/09 23:06, , 4F
維基百科 floating point 條目 http://goo.gl/MOSmYr
02/09 23:06, 4F

02/09 23:07, , 5F
single float 有效位數部份只有 23 bits 精度
02/09 23:07, 5F

02/10 00:49, , 6F
相當於有效位數 7 位十進位 (多一點點), 所以到 1 都是準的
02/10 00:49, 6F

02/11 00:06, , 7F
原PO可以用float格式把數字表達出來,應該就知道為什麼了
02/11 00:06, 7F

02/11 00:08, , 8F
就是你去算significand跟exponent各應該是多少.
02/11 00:08, 8F
文章代碼(AID): #1IzvT8Zl (C_and_CPP)