本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

締切済み
※ ChatGPTを利用し、要約された質問です(原文:PICマイコン MPLABアセンブラで小数点の累…)

PICマイコン MPLABアセンブラで小数点の累乗(べき乗)

2023/10/19 02:41

このQ&Aのポイント
  • MPLABのアセンブラを使用して、PICマイコンで小数点の累乗を計算する方法を知りたいです。具体的には、n^-0.9067の計算方法や、四則計算だけで計算できるか、小数点を整数に変換して計算可能か、負の値を気にせずに計算できるかについて理解したいです。
  • PICマイコンのMPLABアセンブラを使用して、n^-0.9067の計算方法について教えてください。また、計算には四則計算だけでできるのか、小数点を整数の変換して計算できるのか、負の値を気にせずに(正の数として)計算できるのかについても教えてください。
  • MPLABのアセンブラを使用してPICマイコンで小数点の累乗(n^-0.9067)を計算する方法を教えてください。具体的な計算方法や四則計算のみで計算できるか、小数点を整数に変換して計算できるか、負の値を無視して計算できるかについても教えてください。
※ 以下は、質問の原文です

PICマイコン MPLABアセンブラで小数点の累…

2012/01/13 11:20

PICマイコン MPLABアセンブラで小数点の累乗(べき乗)

n^-0.9067の計算をMPLABのアセンブラでやりたいのですが
記述、計算方法がわかりません。

わからない点
・四則計算だけでできるのか
・小数点を整数の変換して計算可能か
・負の値を気にせず(正の数)計算できるか

一番知りたいのは四則計算だけで計算できるかです。

これができるとある程度正確な結果が得られるので
ご教授よろしくお願い致します。

回答 (4件中 1~4件目)

2012/01/14 20:51
回答No.4

べき乗がライブラリになければ、次の式を使い計算できます。
  x^y = Exp(logn(x) * y)

見ての通り複雑で計算時間が長く誤差も大きい、やっかいな代表例。
これ大昔のパソコンでの MS-BASIC がルート計算に開平法のかわりに y=0.5 で使っており、手抜きだ、誤差はバグだ、と騒がれたことがありました。

今回は指数が定数であること。それに計算精度が甘くて良い、仮数の範囲が限られるという条件が許せるなら表引きするのが良いと思います。

そのままでは形がわるいので変形する
  n^-0.9067 = 1/n × n^0.0933

右端だけの値を確かめると、>1なら結構素直な変化。
 0.01 0.651
 0.1  0.807
 1  1
 10  1.24
 100  1.53
表を作成して補間する。表の個数は精度と範囲次第。表数値も数式で導出するのが良いが、Exelで眺めて試すだけでも実用に耐えるものが見出せると思います。


>四則計算だけでできるのか
  OK
>小数点を整数の変換して計算可能か
  ライブラリ任せ
>負の値を気にせず(正の数)計算できるか
  冒頭で判定を要しエラー処理

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する
2012/01/14 01:19
回答No.3

Cコンパイラではなくアセンブラなんですよね
MPLAB C18だと
単精度のライブラリはあるので
できると思いますが
http://www.microfan.jp/mplab-c18

アセンブラレベルで
浮動小数はハードが対応していないと
めんどくさいです


http://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6
倍精度


桁合わせて計算し
最後に指数部の計算をする



基本的に足し算引き算で 掛け算割り算はできます

時間かかりますww


5x99 = 5+5+5+…(99階足したもの)
99/5 = 99 から 5が何回日引けるか


少数は 上記のように 指数表記して


123.456 = 123456e-3
0.123456 = 123456e-6

指数部を合わせて桁を合わせる
 123456000
 000123456
-----------
 123579456

指数部を計算する

123579456e-6=123.579456








Z80ですが(Z80はFPUを持っていないので参考になると思います)
http://ldlabo.hishaku.com/NO24/hontai.htm

わかりやすくしたもの
http://kccn.konan-u.ac.jp/information/cs/cyber03/cy3_shc.htm


割り算
http://okwave.jp/qa/q5840424.html

掛け算に対しては0-F の 九九 をメモリ上に置き(16x16=256バイト)
それで計算させると 早くなります インド式を使えばさらに高速化 上記の中ではたぶん最速のアルゴリズム

2012/01/13 12:14
回答No.2

>四則計算だけでできるのか
 連続関数は四則演算だけで出来ます。
 ただし有限時間で出来るかは保証されていませんが
 べき乗関数はそれほど複雑ではありません。

求めるレンジと精度によって
 真面目に浮動小数点算術演算ライブラリをインクルードして計算する。
 計算しないで予め用意したテーブルを引く。
などの方法がありますが、

質問に記述された情報から見た感じでは
 真面目に浮動小数点算術演算ライブラリをインクルードして計算かな。
 http://www.picfun.com/mathlib01.html
 

power関数はここみたい 0.5%精度
http://www.piclist.com/techref/microchip/math/power/16lr-ng.htm
 

2012/01/13 11:36
回答No.1

> 一番知りたいのは四則計算だけで計算できるかです。


テーラー展開してみたらどうだろう。

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。