久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
樓主: 昨日明月

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

[復制鏈接]
11#
發表于 2013-9-14 23:11:39 | 只看該作者
本帖最后由 逍遙處士 于 2013-9-14 23:35 編輯 7 a) E) Y' Z. A. ]+ O
' k' Z  o9 p4 t. r

& m9 |& A* z! U" u+ q5 M- v3 b  F+ B( ~  i# A. p, b
這是用MathCAD做的計算,程序跟一樓一樣,可見第5個也是29,就這來看樓主的程序可能有缺陷。8 `0 ?9 V0 ]6 w( ^
假如齒數為57,則360*3600/57不能整除,問題是否出在這兒?' _7 h1 s: \1 ]! ^2 \2 m
' ?% {- f9 Q4 e- a
假設所給齒數能整除的話,不妨只考慮將第一個角度依次翻倍,代碼如下:3 |9 C# Z5 O: `* q0 `

6 t4 L9 k8 ]0 z2 rint a=0, b=0, c=0;
  l3 i1 Z8 C8 w) W' @while ( a<360 )
4 U  R) H* ~1 w$ C6 F{
# }2 m# D) S8 [" U. L/ [: i  c=(c+s)%60; if ( (c+s)>=60 )  b=(c+s)/60; % @: f1 H# v  @$ @) y( U5 d
  b=(b+f)%60; if ( (b+f)>=60 )  a=(b+f)/60; # m+ j$ D& J' c1 \" S/ v
  a=a+j;
; S& k& ^0 a  X3 [  printf("%d°%d′%d″\n",a,b,c);) N/ e0 |1 ?1 N! e, }) a2 r
}6 _  H; \& `4 o' b! T4 n0 b/ \0 C, ]

" W- g: _& q4 z+ ]7 k* Q不妨試一試,看下結果。2 h1 p# N% t9 i0 R

. x! V! o7 X$ s9 v7 P' ]& D- y

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?注冊會員

×

點評

有點問題,改正在17樓。  發表于 2013-9-15 10:40
12#
發表于 2013-9-15 08:20:37 | 只看該作者
隱含的升位運算和強制降位運算都會遭遇精度損失,如果取值范圍夠用的話,參與運算的數據最好都統一為一種類型,比如全部為float型。
: ?; m+ j, @2 O; w: b  q# c# g4 D! Y0 V* k" d) |. _# l6 N
樓主程序中的
! h6 C' m" u3 e8 T6 r1 U( Z# h$ l3 j$ H! V1 |! c
    int  m=22734;
7 {% m' L! v* A, j
& Y5 a+ w) t4 a: @$ S該值是做什么用的?該值如何來的?
13#
 樓主| 發表于 2013-9-15 08:22:37 | 只看該作者
fmdd 發表于 2013-9-15 08:20 5 }  J  N: q4 w
隱含的升位運算和強制降位運算都會遭遇精度損失,如果取值范圍夠用的話,參與運算的數據最好都統一為一種類 ...
, k8 K/ [- M' N$ P" P
取的值,可以變化的。是6°18′54″轉化為秒數
' @# K. D, ^! }( V2 N" W
14#
發表于 2013-9-15 08:31:22 | 只看該作者
本帖最后由 fmdd 于 2013-9-15 08:33 編輯 7 R9 Q1 d" e1 m; U; ?
昨日明月 發表于 2013-9-15 08:22 " M+ R2 x4 e/ o- I8 {3 u, e
取的值,可以變化的。是6°18′54″轉化為秒數

' n- V8 H7 J: _+ @, v這個取值本身就損失了精度/ G" a% Q  M% B2 ?
; Y: P4 I" S& ~0 P. A9 L7 P+ c
6°18′54″是指一個齒的轉角是么?這個值的精度不夠,計算出來是6.31578947……°
3 a0 U" W3 e$ W7 L  y+ u) T$ n
* }# X7 a( W, s7 P這里的精度損失造成了最后累加數值偏差。
0 N& ^4 m4 X- r
15#
 樓主| 發表于 2013-9-15 08:33:11 | 只看該作者
fmdd 發表于 2013-9-15 08:31 / @: t) l2 x5 t' ?) n- x4 r
這個取值本身就損失了精度
  }- _, p: L+ t+ J: y& j1 {
  f! a; w) [" ~6 P3 d2 g! P6°18′54″是指一個齒的轉角是么?這個值的精度不夠,計算出來是6.3157894 ...

1 o% D' H1 N  N" H9 K# s6 l! Y9 A" W老式銑床精度要求沒那么高。。。 達到秒數就夠了。。。
; c+ |: U4 ^& r3 k# T& p: q
16#
 樓主| 發表于 2013-9-15 09:03:58 | 只看該作者
逍遙處士 發表于 2013-9-14 23:11 % h2 _1 y  n- z1 n8 d" \) o
這是用MathCAD做的計算,程序跟一樓一樣,可見第5個也是29,就這來看樓主的程序可能有缺陷。
; c! @' }! i2 c假如齒數 ...

& a( C0 h8 B5 N- x/ z6 {按照逍遙前輩的代碼運行還是有問題呢?

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?注冊會員

×

點評

搞錯了。應該把 if 語句放前面。  發表于 2013-9-15 10:40
17#
發表于 2013-9-15 10:39:52 | 只看該作者
這是一個很有意思的問題。我也試了以下,結果當i = 5的時候,c 確實等于29。為此,當i = 5的時候,檢查 c 取整以后的余數 =1 ,也是一個整數。它就是 c 所差的數,由此,我就懷疑程序本身的內部函數在處理“余數”的問題?!為此,我把6°18′54″化成22734″的數值改成了22734.0001″,結果一切正常。這說明你所編的程序并沒有錯。請試試看。
18#
發表于 2013-9-15 10:41:38 | 只看該作者
把那兩行改成這樣試一試:
$ e# `. u6 o# e' T3 Z% hif ( (c+s)>=60 )  b=(c+s)/60; c=(c+s)%60;
6 }% S: _0 J; r5 dif ( (b+f)>=60 )  a=(b+f)/60;  b=(b+f)%60;
19#
 樓主| 發表于 2013-9-15 11:42:32 | 只看該作者
逍遙處士 發表于 2013-9-15 10:41
& m. L) a4 Y5 W3 `0 L( r把那兩行改成這樣試一試:' \- W, N8 f1 @, m% M
if ( (c+s)>=60 )  b=(c+s)/60; c=(c+s)%60;
6 g3 _0 ~& q5 |: R" Q# v4 a* kif ( (b+f)>=60 )  a=(b+f)/60;  ...
  r. [3 K8 [& t. J1 l) B. L
改后是這個結果,也不行。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?注冊會員

×
20#
發表于 2013-9-15 11:57:54 | 只看該作者
本帖最后由 逍遙處士 于 2013-9-15 12:00 編輯 $ \, A" F. o4 V7 l" i
昨日明月 發表于 2013-9-15 11:42 + C2 K6 L" s+ h2 u  U2 K- t2 p3 l
改后是這個結果,也不行。
! Q2 e( w6 `0 {
. _2 j6 \/ m5 Y( p% I
漏掉了一個 號,哈哈!
+ T" c( m/ L; I/ O- `- Q% I吾寶刀未老也!
" M, u9 K4 A9 ~
6 _; K) X( {" U3 L

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?注冊會員

×

點評

三分寫,七分試。  發表于 2013-9-15 12:02
這次整對了。謝謝逍遙前輩。  發表于 2013-9-15 12:01
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

Archiver|手機版|小黑屋|機械社區 ( 京ICP備10217105號-1,京ICP證050210號,浙公網安備33038202004372號 )

GMT+8, 2025-7-14 04:01 , Processed in 0.072133 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表