新世紀の音声圧縮フォーマットOgg Vorbis

このエントリーをはてなブックマークに追加
227名無しさん@お腹いっぱい。
220だけど、Intel C/C++ Compilerでビットレートがおかしくなる
現象の対処法、やっと発見したよヽ(´ー`)ノ
psy.cの300行目付近の
inthalfoc=(int)halfoc;

inthalfoc=(int)floor(halfoc);
に変更すべし(´ー`)y-~~~~
インテルぢゃ無くても浮動小数点数→整数変換で、
切り捨てぢゃ無くて近似値にする一部のコンパイラで効果あり。
見つけるのに3時間かかったよΣ( ̄▽ ̄;)
228名無しさん@お腹いっぱい。:2001/06/08(金) 22:51 ID:???
それ、そもそもANSIに従ってないIntelのコンパイラも変だが、
ソースに変更を加えるよりもFPUコントロールレジスタいじったほうが
よくない?
229名無しさん@お腹いっぱい。:2001/06/09(土) 18:39 ID:???
>>228

インテルでも設定でANSI標準の切り捨てに変更できるけど、
x87の場合近似値がデフォルトだから、切り捨てにすると遅くなる。

あと、Oggのソースはほとんどはそういうコンパイラも考慮されているのか、
切り捨てなければいけないところはちゃんとfloor()関数使って
明示的に切り捨ててるから。

たぶん、今回のところは、開発中なので面倒だったのか、忘れただけなのかで
floor()が使われてないだけ。
他に使われてないところも3箇所くらいしかない。

つーことで納得した?(・ロ・
230とおりすがり:2001/06/09(土) 19:34 ID:???
ごめんつっこみたくなっちゃった(^^) 許してくださいね。

> インテルでも設定でANSI標準の切り捨てに変更できるけど、
>x87の場合近似値がデフォルトだから、切り捨てにすると遅くなる。
その「デフォルト」とやらをANSIのような切り捨てモード(0方向への丸め)
にすればいいって228は言ってるんじゃないでしょうか。fist/fistpがそのままで
ANSI準拠になるモードに最初からしておけばよいと。
vorbisfile.cでは似たようなことをやってますよね。
だったらコントロールワード切り替えに必要なタイムロスは無くなるから。

>Oggのソース
Vorbisのソースですね。Oggの方は浮動小数点演算使ってないから。

> 切り捨てなければいけないところはちゃんとfloor()関数使って
まさかLilithの作者さんたる人がわかってて書いてるとは思うけど、
floorは小数点以下切り捨てじゃないし、通常の=演算子がやるような
double(float)->integer変換とは違いますので・・・

> 他に使われてないところも3箇所くらいしかない。
5カ所以上はありますよ。
floorのやることと=演算子のやることが違うからわざわざfloorを使って
書いてあるんであって、忘れたとかじゃないと思います。

っつーことで納得しました?(笑) >>228
僕は不安です。
231age:2001/06/09(土) 19:45 ID:???
age
232228:2001/06/09(土) 22:17 ID:???
230さんフォローどうもっす。

intelのコンパイラは実数->整数の暗黙の変換の際は標準でfld/fistpの
組を生成して、ANSI準拠のオプションをつけると、いちいちその都度
コントロールレジスタを切り替えるようなコードを生成するそうな。
だったらオプションをつけずに最初からコントロールレジスタを0方向
への丸めに設定しておけばどうよ、という話なんだな。

>インテルでも設定でANSI標準の切り捨てに変更できるけど、
>x87の場合近似値がデフォルトだから、切り捨てにすると遅くなる。
floor使うのとどっこいどっこいだと思うけど違う?
だいたいあなたの論でいうとANSI切り捨てモードにして影響を
受けるのは3カ所ぐらいしかないんでしょ?(笑)

>つーことで納得した?(・ロ・
うーん、納得できなかったよ(藁)おまけに説教までされちった。

使ってる顔文字とか口調もそうだけど、万が一「こいつは俺を見下して
る」と相手に思われると損だから気をつけた方がいいと思いますよ >
Northern Verse さん