(57)【要約】      （修正有）【課題】四元数の四則演算の計算をハードウェア・レベルで計算する。【解決手段】四元数を行列表現する。四元数Ｈ＝ａＥ＋ｂＩ＋ｃＪ＋ｄＫの４個の成分の抽出は行列の４行目を見れば、符号が正の実数であり、｛ｂ、ｃ、ｄ、ａ｝の順番に並んでいる。この四元数の計算を高速に、しかもチップ上で遊んでいる回路が少なくなる様にハードウェアとソフトウェアをトレードオフすると、掛け算と割り算では四元数の成分をレジスターにセットした後、成分の一つ一つをアセンブラで１行ずつ計算する方がハードウェア的に効率が良い。その為に、掛け算回路が４個、ＦＡが４個、割り算回路が１個あれば、内部の四元数の四則演算のそれぞれの計算回数は、レジスターへのコピーも含めて、Ｈ１＋Ｈ２が４回、Ｈ１−Ｈ２が４回、Ｈ１・Ｈ２が７回及びＨ１／Ｈ２が１１回となる。【選択図】なし【特許請求の範囲】
【請求項１】
コンピューターのＣＰＵで四元数を実数で計算する方法
【発明の詳細な説明】
【技術分野】
【０００１】  この発明はデジタル回路に関する。
【発明の概要】
【０００２】  この発明は、コンピューターのＣＰＵで、四元数の四則演算を実数で計算する方法である。
【背景技術】
【０００３】  今までのコンピューターのＣＰＵでは、四元数の四則演算をそのまま計算する事が出来ず、プログラムで四元数の四則演算の計算方法を記述し、計算している。四元数は、３Ｄグラフィックスでのポリゴン等の物体の回転の座標計算や人工衛星の姿勢制御に３軸制御の技術と共に、使用されている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】  今までのＣＰＵは、ハードウェア・レベルで四元数の四則演算を計算する事が出来ず、プログラムで四元数の四則演算の計算方法を記述していた。この四元数の四則演算の計算をハードウェア・レベルで計算できる様にする物である。
【課題を解決するための手段】
【０００５】  この為、この発明においては、コンピューターのＣＰＵで四元数の四則演算をハードウェア・レベルで計算出来る様にする為に、四元数を行列表現する。そうすれば、四元数を普通の実数と同じように単なる数として記述できて、四元数の四則演算も簡単に出来る。
四元数の単位を｛Ｅ、Ｉ、Ｊ、Ｋ｝として、これらの単位を行列表現すると
2017224258.tif 000002
2017224258.tif 000003
と表現できる。
四元数  Ｈ＝ａＥ＋ｂＩ＋ｃＪ＋ｄＫは
2017224258.tif 000004
と表現できる。
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の足し算は
2017224258.tif 000005
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の引き算は
2017224258.tif 000006
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の掛け算は
2017224258.tif 000007
と表現できる。ここで四元数は  Ｈ＝Ｈ１・Ｈ２＝ＡＥ＋ＢＩ＋ＣＪ＋ＤＫであり、Ａ、Ｂ、Ｃ、Ｄは以下の通りである。
Ａ＝  ａ１ａ２−ｂ１ｂ２−ｃ１ｃ２−ｄ１ｄ２
Ｂ＝  ａ１ｂ２＋ｂ１ａ２＋ｃ１ｄ２−ｄ１ｃ２
Ｃ＝  ａ１ｃ２−ｂ１ｄ２＋ｃ１ａ２＋ｄ１ｂ２
Ｄ＝  ａ１ｄ２＋ｂ１ｃ２−ｃ１ｂ２＋ｄ１ａ２
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の割り算は
2017224258.tif 000008
と表現できる。
ここで四元数は  Ｈ＝Ｈ１／Ｈ２＝（ＡＥ＋ＢＩ＋ＣＪ＋ＤＫ）／Ｆであり、Ａ、Ｂ、Ｃ、Ｄ、Ｆは以下の通りである。
Ａ＝  ａ１ａ２＋ｂ１ｂ２＋ｃ１ｃ２＋ｄ１ｄ２
Ｂ＝−ａ１ｂ２＋ｂ１ａ２−ｃ１ｄ２＋ｄ１ｃ２
Ｃ＝−ａ１ｃ２＋ｂ１ｄ２＋ｃ１ａ２−ｄ１ｂ２
Ｄ＝−ａ１ｄ２−ｂ１ｃ２＋ｃ１ｂ２＋ｄ１ａ２
Ｆ＝（ａ２）２＋（ｂ２）２＋（ｃ２）２＋（ｄ２）２
Ｈ２で、ａ２＝１、ｂ２＝０、ｃ２＝０、ｄ２＝０とすれば、実数の１で掛け算、割り算をしている事になるので、単に四元数Ｈを代入している事になる。
四元数  Ｈ＝ａＥ＋ｂＩ＋ｃＪ＋ｄＫ  の４個の成分の抽出は行列の４行目を見れば、符号が正の実数であり、｛ｂ、ｃ、ｄ、ａ｝の順番に並んでいる。
この四元数の計算を高速に、しかもチップ上で遊んでいる回路が少なくなる様にハードウェアとソフトウェアのトレードオフをすると、掛け算と割り算では四元数の成分をレジスターにセットした後、成分の一つ一つをアセンブラで１行ずつ計算する方がハードウェア的に効率が良く、その為に、掛け算回路が４個、ＦＡが４個、割り算回路が１個あれば、内部の四元数の四則演算の、それぞれの計算回数はレジスターへのコピーも含めて
Ｈ１＋Ｈ２  ：４回
Ｈ１−Ｈ２  ：４回
Ｈ１・Ｈ２  ：７回
Ｈ１／Ｈ２  ：１１回
となる。但し、内部の計算用のレジスターが５個必要となる。
ＣＰＵのＡＬＵがアクセス出来るレジスターとして必要な数は、四元数を
Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  とすれば、
ａ１、ｂ１、ｃ１、ｄ１、ａ２、ｂ２、ｃ２、ｄ２の８個が必要となる。
足し算
2017224258.tif 000009
引き算
2017224258.tif 000010
掛け算
2017224258.tif 000011
割り算
2017224258.tif 000012
括弧でくっくた部分が、それぞれ１回のマシン・サイクルで同時にレジスターの移動・計算できる四元数の計算で、計算結果は、四元数の各成分がレジスター｛ａ１、ｂ１、ｃ１、ｄ１｝に入って来る。掛け算命令で、レジスター｛ａ１、ｂ１、ｃ１、ｄ１｝からレジスター｛ｒｅｇ．１、ｒｅｇ．２、ｒｅｇ．３、ｒｅｇ．４｝に数値をコピーするのは、計算結果をレジスター｛ａ１、ｂ１、ｃ１、ｄ１｝に代入して戻す為にレジスターの数値が書き換わり、四元数の成分の計算は、レジスターの中身の数値が影響する為に、新しいレジスターに数値をコピーし、成分の計算自体は、レジスターの数値とその計算する順番に依存する為である。割り算命令は、掛け算命令に数ステート、ステート数を増やせば良い。これで、アセンブラのニーモニック４行で四元数の四則演算がそれぞれ計算可能となる。コンピューターの高級言語の記述としては、四元数を意識する事無く、単なる数として四則演算を記述すれば良い。
ＣＰＵに掛け算回路が４個、ＦＡが４個、割り算回路が１個あれば、ＣＰＵのＡＬＵがアクセス出来るレジスターとして必要な数は、四元数を
Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  とすれば、
ａ１、ｂ１、ｃ１、ｄ１、ａ２、ｂ２、ｃ２、ｄ２の８個が必要となる。但し、ＡＬＵが直接アクセス出来ない、掛け算回路、割り算回路、ＦＡが参照する内部の計算用のレジスターが５個必要となる。
【発明の効果】
【０００６】  この発明により、ハードウェア・レベルで四元数の四則演算が実数の演算として簡単に計算できて、四元数を普通の実数と同じ様に単なる数として記述する事が出来る。しかも、３Ｄ−ＣＧや流体力学の数値計算を行って、その結果をＣＧでモニターに表示する場合などに必要となり、ＣＰＵでの四元数に依る数値計算は頻繁に使うので、ハードウェア・レベルで四元数の四則演算が出来れば、さらに科学技術計算が速くなる。
【関連特許】
特願２０１６−５７５８９
【手続補正書】
【提出日】平成28年8月22日(2016.8.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００５
【補正方法】変更
【補正の内容】
【０００５】  この為、この発明においては、コンピューターのＣＰＵで四元数の四則演算をハードウェア・レベルで計算出来る様にする為に、四元数を行列表現する。そうすれば、四元数を普通の実数と同じように単なる数として記述できて、四元数の四則演算も簡単に出来る。
四元数の単位を｛Ｅ、Ｉ、Ｊ、Ｋ｝として、これらの単位を行列表現すると
2017224258.tif 000013
と表現できる。すると
四元数  Ｈ＝ａＥ＋ｂＩ＋ｃＪ＋ｄＫは
2017224258.tif 000014
と表現できる。
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の足し算は
2017224258.tif 000015
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の引き算は
2017224258.tif 000016
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の掛け算は
2017224258.tif 000017
と表現できる。ここで四元数は  Ｈ＝Ｈ１・Ｈ２＝ＡＥ＋ＢＩ＋ＣＪ＋ＤＫであり、Ａ、Ｂ、Ｃ、Ｄは以下の通りである。
Ａ＝  ａ１ａ２−ｂ１ｂ２−ｃ１ｃ２−ｄ１ｄ２
Ｂ＝  ａ１ｂ２＋ｂ１ａ２＋ｃ１ｄ２−ｄ１ｃ２
Ｃ＝  ａ１ｃ２−ｂ１ｄ２＋ｃ１ａ２＋ｄ１ｂ２
Ｄ＝  ａ１ｄ２＋ｂ１ｃ２−ｃ１ｂ２＋ｄ１ａ２
四元数  Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  の割り算は
2017224258.tif 000018
と表現できる。
ここで四元数は  Ｈ＝Ｈ１／Ｈ２＝（ＡＥ＋ＢＩ＋ＣＪ＋ＤＫ）／Ｆ
であり、Ａ、Ｂ、Ｃ、Ｄ、Ｆは以下の通りである。
Ａ＝  ａ１ａ２＋ｂ１ｂ２＋ｃ１ｃ２＋ｄ１ｄ２
Ｂ＝−ａ１ｂ２＋ｂ１ａ２−ｃ１ｄ２＋ｄ１ｃ２
Ｃ＝−ａ１ｃ２＋ｂ１ｄ２＋ｃ１ａ２−ｄ１ｂ２
Ｄ＝−ａ１ｄ２−ｂ１ｃ２＋ｃ１ｂ２＋ｄ１ａ２
Ｆ＝（ａ２）２＋（ｂ２）２＋（ｃ２）２＋（ｄ２）２
Ｈ２で、ａ２＝１、ｂ２＝０、ｃ２＝０、ｄ２＝０とすれば、実数の１で掛け算、割り算をしている事になるので、単に四元数Ｈを代入している事になる。
四元数  Ｈ＝ａＥ＋ｂＩ＋ｃＪ＋ｄＫ  の４個の成分の抽出は行列の４行目を見れば、符号が正の実数であり、｛ｂ、ｃ、ｄ、ａ｝の順番に並んでいる。
この四元数の計算を高速に、しかもチップ上で遊んでいる回路が少なくなる様にハードウェアとソフトウェアのトレードオフをすると、掛け算と割り算では四元数の成分をレジスターにセットした後、成分の一つ一つをアセンブラで１行ずつ計算する方がハードウェア的に効率が良く、その為に、掛け算回路が４個、ＦＡが４個、割り算回路が１個あれば、内部の四元数の四則演算の、それぞれの計算回数はレジスターへのコピーも含めて
Ｈ１＋Ｈ２  ：４回
Ｈ１−Ｈ２  ：４回
Ｈ１・Ｈ２  ：８回
Ｈ１／Ｈ２  ：１２回
となる。但し、内部の計算用のレジスターが５個必要となる。
ＣＰＵのＡＬＵがアクセス出来るレジスターとして必要な数は、四元数を
Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  とすれば、
ａ１、ｂ１、ｃ１、ｄ１、ａ２、ｂ２、ｃ２、ｄ２の８個が必要となる。
足し算
2017224258.tif 000019
引き算
2017224258.tif 000020
掛け算
2017224258.tif 000021
割り算
2017224258.tif 000022
2017224258.tif 000023
括弧でくっくた部分が、それぞれ１回のマシン・サイクルで同時にレジスターの移動・計算できる四元数の計算で、計算結果は、四元数の各成分がレジスター｛ａ１、ｂ１、ｃ１、ｄ１｝に入って来る。掛け算命令で、レジスター｛ａ１、ｂ１、ｃ１、ｄ１｝からレジスター｛ｒｅｇ．１、ｒｅｇ．２、ｒｅｇ．３、ｒｅｇ．４｝に数値をコピーするのは、計算結果をレジスター｛ａ１、ｂ１、ｃ１、ｄ１｝に代入して戻す為にレジスターの数値が書き換わり、四元数の成分の計算は、レジスターの中身の数値が影響する為に、新しいレジスターに数値をコピーし、成分の計算自体は、レジスターの数値とその計算する順番に依存する為である。割り算命令は、掛け算命令に数ステート、ステート数を増やせば良い。これで、アセンブラのニーモニック４行で四元数の四則演算がそれぞれ計算可能となる。コンピューターの高級言語の記述としては、四元数を意識する事無く、単なる数として四則演算を記述すれば良い。
ＣＰＵに掛け算回路が４個、ＦＡが４個、割り算回路が１個あれば、ＣＰＵのＡＬＵがアクセス出来るレジスターとして必要な数は、四元数を
Ｈ１＝ａ１Ｅ＋ｂ１Ｉ＋ｃ１Ｊ＋ｄ１Ｋ  と
Ｈ２＝ａ２Ｅ＋ｂ２Ｉ＋ｃ２Ｊ＋ｄ２Ｋ  とすれば、
ａ１、ｂ１、ｃ１、ｄ１、ａ２、ｂ２、ｃ２、ｄ２の８個が必要となる。但し、ＡＬＵが直接アクセス出来ない、掛け算回路、割り算回路、ＦＡが参照する内部の計算用のレジスターが５個必要となる。