質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2580閲覧

GLdouble, doubleどっちを使うべきなのか?

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/27 00:59

編集2021/06/27 01:00

提示コードの第4引数ですがGLdouble とdouble どっちを使うのが正しいコードなのでしょうか?調べると#define で別名が定義されているだけなのですがどちらが正しいコードなのでしょうか?

cpp

1 void DrawCircle(glm::vec2 pos,unsigned short num,unsigned short width,GLdouble r, glm::vec4 color) 2 void DrawCircle(glm::vec2 pos,unsigned short num,unsigned short width,double r, glm::vec4 color) 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/06/27 02:40

ご自身はどうお考えですか?
guest

回答2

0

ベストアンサー

GLdouble という型を誰が使うのか(誰が使わないのか)という切り分け次第だと思う.

「関数DrawCircleを使う側では GLdouble という型を知る必要が無い」という形にするのか,それとも外側でも GLdouble という型を扱う形にするのか,っていう.

  • double r とするならば,とにかく関数DrawCircleの仕様としてその引数はdoubleなわけで,この関数が内側で何やかんやして最終的に「GLdouble 型」の値を扱ったりしていることについては,関数呼び出し側にとっては知ったことではない.

この場合,例えば将来的に GLdouble の定義が何かすっごい精度の double double double みたいなった場合でも,呼び出し型は何も考えずに済む.代償としてrの精度がdoubleに制限されるかもしれないが.

  • GLdouble r とするならば,この関数DrawCircleはこの型を指定しているわけだから,呼び出し側ではGLdouble型の値を用意してこの関数に突っ込む必要がある.

「GLdouble 型」として値を扱う責任(?)が呼び出し側に負わされるような形.


しかしそのコードだと,DrawCircleの別の引数 pos が glm::vec2 型になってる(多分,要素はfloat)から,引数 r だけを GLdouble 型にしてもあまり面白いことは無いような…?

投稿2021/06/28 05:49

編集2021/06/28 05:50
fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/28 05:51

glRorated関数がdouble型が引数なので関数でdouble型を引数に取った方が細かい値がいじれると思ったのですがこのあたりはどうなのでしょか?
fana

2021/06/28 06:13

まぁ,今書いてるコードが GLdoubleの定義が変更されるかもしれない遠い未来(?)まで使われる可能性がどれだけあるのか? と考えると,あなたや私が趣味で書いているようなコードに関して言えば考えるだけ無駄な気がしますので, その関数の外側でも「GLdouble」って書きたいかどうか(そのためには何かincludeとかが必要かもしれない)で決めればいいでしょう. 精度がどうのいう面について言えば,「今現在,動くのに十分な型」であればOK じゃないでしょうか.
asm

2021/06/28 07:26

https://www.khronos.org/opengl/wiki/OpenGL_Type 見る限り > 例えば将来的に GLdouble の定義が何かすっごい精度 は逆に感じます。 double側の定義が将来「IEEE-754 64bit」以外になる可能性を考慮しているように思います。
fana

2021/06/28 07:49

型のbit幅を規定するためのもの,ってことですね.
asm

2021/06/28 08:00

bit幅もそうですが、IEEE-754が別規格に置換された場合もやっかいです。 C/C++は型の詳細について処理系依存にしていた筈なので double=10進浮動小数の環境も可能性としてはありえた筈です。
fana

2021/06/28 08:14 編集

えっと,その観点でこの質問へ答えるとしたらどちらが良いとか悪いとかいう話はどうなるのでしょうか? OpenGL側のGLdouble と,僕らの使う C/C++ のdoubleとで規格が異なる状態を考えるとしたら,「そこの間の変換を自作の関数内で本当にやれるんか? お?」って話になるから,関数の引数は GLdouble にしとくのが良い的な方向になりますか? (関数を呼ぶ側がどうやって頑張るのかはわからんですが)
asm

2021/06/28 08:33

自作関数の性質次第じゃないですか? なんの加工もなくOpenGL側に渡すだけならばGLdouble使いますし 自作関数内で加工してOpenGL側に渡すのであればdoubleを用いてOpenGLライブラリ(binding?)とコンパイラに任せます
退会済みユーザー

退会済みユーザー

2021/06/28 09:11

この場合はどっちが正しいのでしょうか?
asm

2021/06/28 10:15

繰り返しになりますが、自作関数DrawCircleおよびその引数rの性質・目的次第です。 GLdoubleに保証されるのはOpenGLとの受け渡しに使える事 doubleに保証されるのは計算できる事 GLdouble<=>doubleの変換はOpenGL.h的なやつが実装するかもしれませんししないかもしれません。 まぁ、わからんというのであればdoubleにしておいた方が無難です。
guest

0

現時点ではどちらも正しい。
が、将来 GLdouble の定義が変更になったときのこと考えると GLdouble 使っておくのが無難。

投稿2021/06/27 02:43

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問