コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2020年4月17日 >>> 2020年4月4日
link もっと後

2020年4月17日

Facebookのリッチエディタ

Facebookのエディタはめちゃくちゃ重くて、添付の画像のように表示がおかしくなったり、突然カーソル位置が先頭に吹っ飛んだり、変な動きばかりします。


顔文字が真っ二つ

文章が長い場合は、他のテキストエディタで書いて張り付けた方が良いですね。

これはFacebookに長い文章を書くんじゃねえよ、と言いたいFacebookの意思なのかな……。

メモ: 技術系の話はFacebookから転記しておくことにした。

編集者:すずき(2024/10/24 23:36)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2020年4月11日

三角関数のfloat版

目次: C言語とlibc

標準Cライブラリにはdoubleを返す三角関数(sin(), cos(), tan())とfloatを返す三角関数(sinf(), cosf(), tanf())が定義されています。

標準Cライブラリの一つの実装であるmuslのコードを見ると、sinf, cosf, tanfの計算にdouble演算を内部で使っています。これは基になったFreeBSDのlibmと同じ実装です。PCはfloatでもdoubleでも関係なく速いんですが、doubleをハードで扱えない貧相なプロセッサには優しくない作りです。

もう一つの実装であるnewlibのコードを見ると、double版のsin, cosこそFreeBSDの実装と同じですが、float版のsinf, cosfはfloatを使ったコードが独自に追加されていて、貧相なプロセッサにも優しい作りになっています。組み込みにやたら使われる実績は伊達じゃないですね。

じゃあmuslにnewlibのfloat版のsinf, cosfを移植すれば、doubleが苦手なプロセッサでも速くなるのでは?と思いました。

テストを先に書こう

コードを触る前に、それぞれの実装の素性を調べておこうと思います。テスト方法は、

  • 期待値: glibcのsin, cos, tan(double版)をfloatに変換した結果
  • 判定方法: sinf, cosfは1の誤差を許す、tanfは3の誤差を許す
  • 比較範囲: floatを32bitとして、全値域(=約43億パターン)

どうしてtanfだけ判定が甘いかというと、正しい値がわからなかったからです。なぜかglibcの実装も誤差1に収まっていません。どういうことなの……。

テストのコードはGitHubに置き(リンク)ました。特に難しい点はありませんが、muslとnewlibから三角関数を拝借するところは、やや面倒かもしれません。

現在のプロセッサは超速いし、問題の性質上マルチスレッド化も簡単ですから、32並列くらいで頑張れば32bit全域を調査しても3分もかかりません。楽勝ですね〜。

最初にテストして良かった

テスト結果は、当然、全て一致かと思いきや、そんなことはなかった。最初にテストしておいて良かったですね。

良い方から言うとmuslは内部でdoubleで演算しているからか、結果もパーフェクトでした。

一方のnewlibはcosfだけ変な値を返します。32bit全域を試してわずか6パターンです。

誤差が許容範囲を超えるパターン
cos,cosf_newlib: NG : x:3fc90fe0 f:1.570797 d:1, exp:b52bbbd3 -0.000001, res:b52bbbd0 -0.000001
cos,cosf_newlib: NG : x:3fc90fe1 f:1.570797 d:1, exp:b54bbbd3 -0.000001, res:b54bbbd0 -0.000001
cos,cosf_newlib: NG : x:3fc90fe2 f:1.570797 d:1, exp:b56bbbd3 -0.000001, res:b56bbbd0 -0.000001

cos,cosf_newlib: NG : x:bfc90fe0 f:-1.570797 d:1, exp:b52bbbd3 -0.000001, res:b52bbbd0 -0.000001
cos,cosf_newlib: NG : x:bfc90fe1 f:-1.570797 d:1, exp:b54bbbd3 -0.000001, res:b54bbbd0 -0.000001
cos,cosf_newlib: NG : x:bfc90fe2 f:-1.570797 d:1, exp:b56bbbd3 -0.000001, res:b56bbbd0 -0.000001

正負を考慮(浮動小数点は最上位ビットが符号を示すビット)すると、実質3パターンで変な値が返ることがわかります。

  • 正: 0x3fc90fe0, 0x3fc90fe1, 0x3fc90fe2
  • 負: 0xbfc90fe0, 0xbfc90fe1, 0xbfc90fe2

誤差は3でした。ほぼ合ってます、おしい。誤差が出ることも不思議ですが、sinfは合っていてcosfだけ値がズレるのも不思議です。

編集者:すずき(2022/04/22 03:00)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2020年4月17日 >>> 2020年4月4日
link もっと後

管理用メニュー

link 記事を新規作成

<2020>
<<<04>>>
---1234
567891011
12131415161718
19202122232425
2627282930--

最近のコメント20件

  • link 25年2月19日
    katanaさん (03/21 05:30)
    「katana」
  • link 25年1月23日
    katanaさん (03/20 18:50)
    「katana」
  • link 24年12月9日
    すずきさん (03/14 00:42)
    「Thanks for your comm...」
  • link 24年12月9日
    hyfanさん (03/13 07:21)
    「Hello from Santa Cla...」
  • link 25年2月10日
    すずきさん (02/13 02:03)
    「解読しました。なるほど、exitの引数が...」
  • link 25年2月10日
    hdkさん (02/12 08:06)
    「あ、すみません、比較元に間違いがありまし...」
  • link 25年2月10日
    hdkさん (02/12 08:01)
    「なるほど、最後に%rdiを0にするのはこ...」
  • link 20年6月29日
    すずきさん (02/12 00:12)
    「お役に立ったようであれば幸いです。」
  • link 25年2月7日
    すずきさん (02/12 00:11)
    「なるほど。動きそうなのになんで動かないん...」
  • link 20年6月29日
    うどん?さん (02/11 17:04)
    「私のLenovoタブレットも87%にした...」
  • link 25年2月7日
    hdkさん (02/10 22:31)
    「push $0x3e0002のかわりにm...」
  • link 20年7月2日
    すずきさん (01/30 22:40)
    「ちょっと何を言っているのか良くわからなか...」
  • link 20年7月2日
    初心者さん (01/29 07:34)
    「Steamを見たとき、AmazonよりU...」
  • link 21年9月20日
    すずきさん (11/19 01:04)
    「It was my pleasure.」
  • link 21年9月20日
    whtさん (11/17 23:41)
    「This blog solves my ...」
  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」
  • link 24年10月1日
    hdkさん (10/03 08:30)
    「おー、面白いですね。xrdpはすでに立ち...」
  • link 14年6月13日
    2048player...さん (09/26 01:04)
    「最後に、この式を出すのに紙4枚(A4)も...」

最近の記事3件

  • link 25年3月31日
    すずき (04/11 23:28)
    「[首都高バトルSteam版、フルチューン後の姿 - その2] 目次: ゲーム首都高バトル(Steam版)高ランクの車をひたすら...」
  • link 21年12月28日
    すずき (04/11 00:05)
    「[ゲーム - まとめリンク] 目次: ゲーム一覧が欲しくなったので作りました。Wizardry(囚われし亡霊の街)敵が強すぎる...」
  • link 25年3月24日
    すずき (04/10 23:49)
    「[首都高バトルSteam版、フルチューン後の姿 - その1] 目次: ゲーム今の首都高バトル(Steam版)はWonderer...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDFファイル RSS 1.0

最終更新: 04/11 23:28