機(jī)械社區(qū)

 找回密碼
 注冊(cè)會(huì)員

QQ登錄

只需一步,快速開始

搜索
樓主: 昨日明月
打印 上一主題 下一主題

求解一個(gè)C語言程序功能是每隔6°18′54″就增加6°18′54″并輸出結(jié)果的程序問題。

[復(fù)制鏈接]
11#
發(fā)表于 2013-9-14 23:11:39 | 只看該作者
本帖最后由 逍遙處士 于 2013-9-14 23:35 編輯
& Y& l" L! K2 ^7 m$ g
1 G/ U, l/ n; q: K3 H) B2 E4 z# C/ i, r  H
0 q& N1 `/ x- r9 O6 }
這是用MathCAD做的計(jì)算,程序跟一樓一樣,可見第5個(gè)也是29,就這來看樓主的程序可能有缺陷。
5 T( `, I7 X; l$ l! r假如齒數(shù)為57,則360*3600/57不能整除,問題是否出在這兒?( q3 n, U+ l3 z
% Z  k! |- k) c4 L" ^/ y4 R& w9 W
假設(shè)所給齒數(shù)能整除的話,不妨只考慮將第一個(gè)角度依次翻倍,代碼如下:
, d$ U3 K$ t( o! G. G8 w# m5 H# J7 E' R
int a=0, b=0, c=0;
+ L$ f8 e+ n5 A8 ?% a  A4 H0 R" W  p1 Wwhile ( a<360 )
: k: Y7 c8 L8 T1 v{
) e  m5 f3 P3 Q* `* F9 d& A; T; a* W  c=(c+s)%60; if ( (c+s)>=60 )  b=(c+s)/60;
8 n$ ?. c' ?% A  b=(b+f)%60; if ( (b+f)>=60 )  a=(b+f)/60;
0 u/ Y7 P$ V, J8 C  a=a+j;' `9 H; m$ B! ^; h# e* d% g
  printf("%d°%d′%d″\n",a,b,c);8 a9 V2 ^( R# \% @* c  y
}0 P( n) G* Y- Y/ ~7 i, y

; M' O6 I/ o& A% I1 \- E7 }. ]! a不妨試一試,看下結(jié)果。- @5 B5 _- X; W, ]
! w) }- L- O( A: \7 p# O

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊(cè)會(huì)員

x

點(diǎn)評(píng)

有點(diǎn)問題,改正在17樓。  發(fā)表于 2013-9-15 10:40
12#
發(fā)表于 2013-9-15 08:20:37 | 只看該作者
隱含的升位運(yùn)算和強(qiáng)制降位運(yùn)算都會(huì)遭遇精度損失,如果取值范圍夠用的話,參與運(yùn)算的數(shù)據(jù)最好都統(tǒng)一為一種類型,比如全部為float型。) C' B. V" w4 u# ]0 }' i7 t/ Y+ w. g: p4 Y

/ U9 Q* o  J1 f$ E2 B+ A. ?* b) n  A- A樓主程序中的5 F4 \# {) W" L" f% d0 ?& R: h

, e3 T% ?  t+ B3 h1 }    int  m=22734;/ R4 y% Q9 M# a- S& P' s

1 s9 i9 }5 t0 q' K8 t該值是做什么用的?該值如何來的?
13#
 樓主| 發(fā)表于 2013-9-15 08:22:37 | 只看該作者
fmdd 發(fā)表于 2013-9-15 08:20 ( x( E2 p: u7 w' r' A6 }: n
隱含的升位運(yùn)算和強(qiáng)制降位運(yùn)算都會(huì)遭遇精度損失,如果取值范圍夠用的話,參與運(yùn)算的數(shù)據(jù)最好都統(tǒng)一為一種類 ...

7 c: _4 N# B4 v取的值,可以變化的。是6°18′54″轉(zhuǎn)化為秒數(shù)
6 i# |2 t. @4 H, O. Q; S8 v3 `3 S
14#
發(fā)表于 2013-9-15 08:31:22 | 只看該作者
本帖最后由 fmdd 于 2013-9-15 08:33 編輯 " e! x' b9 P* e
昨日明月 發(fā)表于 2013-9-15 08:22
: {6 I% B% x# q& \: b取的值,可以變化的。是6°18′54″轉(zhuǎn)化為秒數(shù)

! ]7 D; x% N' m' c1 Y& R5 X這個(gè)取值本身就損失了精度% z" `9 q( g, E/ K
" C* K2 F' B- f. V
6°18′54″是指一個(gè)齒的轉(zhuǎn)角是么?這個(gè)值的精度不夠,計(jì)算出來是6.31578947……°
* a# Q) |! A8 x; _5 o
( K- h) ]& d$ @! Y這里的精度損失造成了最后累加數(shù)值偏差。- l% A+ a3 g/ H
15#
 樓主| 發(fā)表于 2013-9-15 08:33:11 | 只看該作者
fmdd 發(fā)表于 2013-9-15 08:31
& O! r3 X; h( s  Q, w: k2 c7 S這個(gè)取值本身就損失了精度
  B# K* ]! V" `$ b7 ~* U- o( o
# B- T3 f( N* D3 d6°18′54″是指一個(gè)齒的轉(zhuǎn)角是么?這個(gè)值的精度不夠,計(jì)算出來是6.3157894 ...
$ m. S  N' U3 _+ @
老式銑床精度要求沒那么高。。。 達(dá)到秒數(shù)就夠了。。。+ f3 e0 u& @: y" ?
16#
 樓主| 發(fā)表于 2013-9-15 09:03:58 | 只看該作者
逍遙處士 發(fā)表于 2013-9-14 23:11 " }. j6 j& j5 ~# |
這是用MathCAD做的計(jì)算,程序跟一樓一樣,可見第5個(gè)也是29,就這來看樓主的程序可能有缺陷。1 |& R+ d: o8 H! n  J+ d
假如齒數(shù) ...
- ~( s8 B3 [0 R+ B! _
按照逍遙前輩的代碼運(yùn)行還是有問題呢?

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊(cè)會(huì)員

x

點(diǎn)評(píng)

搞錯(cuò)了。應(yīng)該把 if 語句放前面。  發(fā)表于 2013-9-15 10:40
17#
發(fā)表于 2013-9-15 10:39:52 | 只看該作者
這是一個(gè)很有意思的問題。我也試了以下,結(jié)果當(dāng)i = 5的時(shí)候,c 確實(shí)等于29。為此,當(dāng)i = 5的時(shí)候,檢查 c 取整以后的余數(shù) =1 ,也是一個(gè)整數(shù)。它就是 c 所差的數(shù),由此,我就懷疑程序本身的內(nèi)部函數(shù)在處理“余數(shù)”的問題?!為此,我把6°18′54″化成22734″的數(shù)值改成了22734.0001″,結(jié)果一切正常。這說明你所編的程序并沒有錯(cuò)。請(qǐng)?jiān)囋嚳础?/td>
18#
發(fā)表于 2013-9-15 10:41:38 | 只看該作者
把那兩行改成這樣試一試:7 v: H6 g  R8 Z$ c- T" j3 y/ v0 v
if ( (c+s)>=60 )  b=(c+s)/60; c=(c+s)%60; 7 M7 `: |" J9 ]7 d0 D
if ( (b+f)>=60 )  a=(b+f)/60;  b=(b+f)%60;
19#
 樓主| 發(fā)表于 2013-9-15 11:42:32 | 只看該作者
逍遙處士 發(fā)表于 2013-9-15 10:41
3 c% j& I! L* b把那兩行改成這樣試一試:) V: ?3 u) F2 l* R+ g
if ( (c+s)>=60 )  b=(c+s)/60; c=(c+s)%60;
" o0 q  ?5 o) r% cif ( (b+f)>=60 )  a=(b+f)/60;  ...

, @' \6 ?0 c5 Z( E. u4 S( \# W/ h改后是這個(gè)結(jié)果,也不行。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊(cè)會(huì)員

x
20#
發(fā)表于 2013-9-15 11:57:54 | 只看該作者
本帖最后由 逍遙處士 于 2013-9-15 12:00 編輯
* Z7 r; b! N7 L7 o# q' a
昨日明月 發(fā)表于 2013-9-15 11:42
5 }: e4 E! @' \1 L' ?, M% m$ Z改后是這個(gè)結(jié)果,也不行。

- s- z  U6 ?3 E1 _% c
" ~3 t( w: c* o2 X3 y漏掉了一個(gè) 號(hào),哈哈!
' Q! m) \# O2 h$ k/ _吾寶刀未老也!
  J; a  E4 [' G0 M8 L' Q0 j- \8 F* J# ^; {: b

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊(cè)會(huì)員

x

點(diǎn)評(píng)

三分寫,七分試。  發(fā)表于 2013-9-15 12:02
這次整對(duì)了。謝謝逍遙前輩。  發(fā)表于 2013-9-15 12:01

本版積分規(guī)則

小黑屋|手機(jī)版|Archiver|機(jī)械社區(qū) ( 京ICP備10217105號(hào)-1,京ICP證050210號(hào),浙公網(wǎng)安備33038202004372號(hào) )

GMT+8, 2024-11-8 07:46 , Processed in 0.057880 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表