このQ&Aは役に立ちましたか?
PICマイコン MPLABアセンブラで小数点の累乗(べき乗)
2023/10/19 02:41
- 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件目)
べき乗がライブラリになければ、次の式を使い計算できます。
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は役に立ちましたか?
この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。
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バイト)
それで計算させると 早くなります インド式を使えばさらに高速化 上記の中ではたぶん最速のアルゴリズム
>四則計算だけでできるのか
連続関数は四則演算だけで出来ます。
ただし有限時間で出来るかは保証されていませんが
べき乗関数はそれほど複雑ではありません。
求めるレンジと精度によって
真面目に浮動小数点算術演算ライブラリをインクルードして計算する。
計算しないで予め用意したテーブルを引く。
などの方法がありますが、
質問に記述された情報から見た感じでは
真面目に浮動小数点算術演算ライブラリをインクルードして計算かな。
http://www.picfun.com/mathlib01.html
power関数はここみたい 0.5%精度
http://www.piclist.com/techref/microchip/math/power/16lr-ng.htm
> 一番知りたいのは四則計算だけで計算できるかです。
テーラー展開してみたらどうだろう。