• ベストアンサー

変換比表

変換比表 ?小数点以下の数字を近似の分数に変換したいのですが できればエクセルで関数を使いたいので 数式が分かれば教えて下さい。 例えば 0.634991189 ≒ 127/200 ?「数表 歯車変換比10000個」 エム・ブエ・サンダコフ著 長谷川一郎訳 工学図書株式会社 という本がありましたが 絶版となっておりますので 合わせて類似の数表の本があれば教えて下さい。

みんなが選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8469/18131)
回答No.1

分数で近似するだけなら,例に上がっている数値でも 0.634991189 ≒ 0/ 1 =0 ≒ 1/ 1 =1 ≒ 1/ 2 =0.5 ≒ 2/ 3≒0.666666667 ≒ 5/ 8 =0.625 ≒ 7/ 11≒0.636363636 ≒ 40/ 63≒0.634920635 ≒ 127/ 200 =0.635 ≒ 294/ 463≒0.634989201 ≒ 421/ 663≒0.634992459 ≒ 715/1126≒0.634991119 というように,いろんな近似の仕方があるのですが,どのくらいの精度をお望みなんでしょうか? それとも歯車と言うことですから,分子,分母の最大値が決まっているのでしょうか?

Q007
質問者

補足

分子,分母の最大値は素数の場合のみ 149迄です。 近似の精度は、1/10000以内を希望します。 具体的には 127/ 200位が希望です。 294/ 463でも近似の精度はいいのですが 463が素数なので 最大値149を超えてます。 また 374/589でも構いません =(2×11×17)/(19×31) で素数が149以下となります。

その他の回答 (3)

  • f272
  • ベストアンサー率46% (8469/18131)
回答No.4

#1 & #3です。1つ忘れてました。 Function test(x) aa = x If aa <= 149 Then test = True Exit Function End If test = False bb = Array(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149) cc = Sqr(aa) For i = 0 To UBound(bb) If bb(i) > cc Then If aa <= 149 Then test = True Exit Function End If If aa = Int(aa / bb(i)) * bb(i) Then aa = aa / bb(i) cc = Sqr(aa) End If Next i End Function

  • f272
  • ベストアンサー率46% (8469/18131)
回答No.3

色々と考えてみたけど,こんなのが一番いいみたいです。 使い方は,元の数値がA1にあれば,それぞれ=分子(A1)と=分母(A1)で分子と分母が計算されます。 Function 分子(x As Double) As Long Dim a As Long, b As Long Call 分子分母(x, a, b) 分子 = a End Function Function 分母(x As Double) As Long Dim a As Long, b As Long Call 分子分母(x, a, b) 分母 = b End Function Sub 分子分母(x As Double, a As Long, b As Long) Dim x0 As Double, eps As Double Dim i As Long x0 = x eps = 0.0001 For b = 1 To 149 a = Round(x * b, 0) If Abs(x0 - CDbl(a) / b) < eps Then Exit Sub Next b For b = 150 To Int(1 / eps) If test(b) Then a = Round(x * b, 0) If Abs(x0 - CDbl(a) / b) < eps Then If test(a) Then Exit Sub End If End If Next b End Sub

noname#102340
noname#102340
回答No.2

A1=0.634991189 B1=4 (近似精度) C1= =ROUNDUP(A1,B1)*10^B1 (四捨五入して小数点以下4桁を採用) D1= =GCD(C1,10^B1) (GCD関数の使い方は下記URL等を参考に) E1= =C1/D1 & "/" & 10^B1/D1 上のように設定しておけばB1セルを変化させることで異なる結果を得ることができます。 素数かどうかの判定はしていません。 希望する値が得られない場合はROUNDUPをROUNDDOWNにするなど変更してみてください。 また、マクロを組めるならご自身で「変換比」のような関数を作ってユーザー定義関数として登録しておかれるといろいろと細かい設定ができるので便利かと思います。

参考URL:
http://office.microsoft.com/ja-jp/excel/HP052091041041.aspx

関連するQ&A