タグ

円周率に関するdelegateのブックマーク (11)

  • Google Cloud 上で 100 兆桁の円周率を計算 | Google Cloud 公式ブログ

    ※この投稿は米国時間 2022 年 6 月 8 日に、Google Cloud blog に投稿されたものの抄訳です。 記録は破るためにあります。2019 年、Google は 31 兆 4000 億桁の円周率を計算し、当時の世界記録を樹立しました。そして 2021 年には グラウビュンデン応用科学大学 の科学者が、さらに 31 兆 4000 億桁上回る計 62 兆 8000 億桁を計算しました。そして日、Google は100 兆桁の円周率を計算し、世界記録を更新したことを発表します。 Google Cloud を使って円周率の桁数の世界記録を更新1するのは今回で 2 度目で、わずか 3 年で桁数を 3 倍に伸ばしました。 この新記録は、 Google Cloud のインフラストラクチャが年々高速化していることの証とも言えます。記録達成の背景には、 Google Cloud の安全でカ

    Google Cloud 上で 100 兆桁の円周率を計算 | Google Cloud 公式ブログ
  • C++で円周率(PI)を1億桁計算してみた Part1 - while(true) ;

    修士課程でプログラムの最適化or高速化という題でプレゼンしてくれということで・・・ なんとなく円周率を計算するプログラムを作成&高速化(※学生レベルの範囲で)してみました! そもそも1億の円周率の計算になにが必要かを簡単にまとめると、 ・多倍長整数 ・高速な円周率の計算式 ・それなりに大きいメモリ といったかんじですね。 なぜ円周率(3.141592…)の計算に浮動小数点型ではなく整数型なのかというと… 主な理由は「計算の高速化」ですね。浮動小数点演算は整数演算よりコストが大きい傾向があるからです。 それじゃあ多倍長整数をつかおう! 任意桁数あつかえる多倍長整数を1から作ってもいいのですが…高速な四則演算扱える形にするには骨が折れますので、 今回はライブラリを使用していきたいと思います。 有名な物には、 ・GMP ・Boost.Multiprecision ・LibTomMath などがあ

    C++で円周率(PI)を1億桁計算してみた Part1 - while(true) ;
  • 多倍長で円周率を計算する

    ■多倍長で円周率を計算する 円周率を計算する公式は沢山ありますが Machinの公式を使って求めたいと思います 公式で使われているアークタンジェントを求めるには、 ■まずは上の公式を使い浮動小数点型を使って円周率を求めるプログラムを書いてみます #include <stdio.h> double arctan(double x){ double a=x;//乗数 double b=1.0;//分母 int flag=0;//引き算/足し算を交互に行うフラグ double pos; double ans=x; do{ a=a*x*x; b+=2; pos=a/b; if(flag=(!flag)){ ans-=pos; }else{ ans+=pos; } }while(pos>0.00001);//小数点以下5桁の精度であきらめる return ans; } int main(){ pri

  • 円周率 10000 桁

    arctan(1/m) を求めることができるプログラムを作り、 バグを取るために arctan(1/5) の計算をして、Windows の電卓で計算した arctan(1/5) の値と比較することにします。 そのため最初は桁数をあまり大きくしません。 #include <stdio.h> #define M 8 // 4*(M-1)=小数点以下の桁数 (10 進表示) #define N 7 // 4*(N-1)=小数点以下の桁数 (16 進表示) // M-1≒1.204(N-1) (M, N の関係) void Add(unsigned a[], unsigned b[]); void Sub(unsigned a[], unsigned b[]); void Div(unsigned a[], unsigned d); void Mul(unsigned a[], unsigned

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • 先日、Visual C++をインストールしたのは - rscのブログ

    先日、Visual C++をインストールしたのは、long longを使うためでした。(^_^;

    先日、Visual C++をインストールしたのは - rscのブログ
  • プログラミングの実験

    ■ プログラミングの実験 ■ 設備を操作するプログラム パソコンで照明を操作する ログファイルを解析するアプリのひな型をVB6で作る ■ Windowsでみんなビックリさせれます パスワード設定解除プログラムについて 押せないボタンなどを押せるようにする ボタンを他のプログラムに貼り付ける 他のプログラムのコントロールの位置を移動させる ■ ベーシック言語を作っちゃおう C++でBASICライクなプログラムを書いてみる 数式を逆ポーランド法に変換するための事柄 C++で逆ポーランド法電卓みたいなのを書いてみる C++でbasicインタプリタを作る basicインタプリタをマクロ言語として使用する ■ 多倍長で計算 10進数⇔16進数 変換 16進数で大きな桁数の計算を行う 10進数で大きな桁数の計算を行う 多倍長で円周率を計算する ■ がんばればOSが作れるかも OSなしで実行できるプログ

  • GMPの使い方

    GMPは多倍長計算を非常に高速に行うライブラリです。アセンブリ言語を少しかじったことがある程度ではGMPの計算速度には太刀打ちできないでしょう。あえて欠点をあげればLinuxライクな開発環境がないとmakeできないということでしょうか。GMPはGMP-ECMやGGNFSなどの素因数分解ソフトウェアで利用されています。もちろん、このライブラリを呼び出すプログラムを自分で書くこともできます。 1. Cygwinのインストール CygwinはWindowsLinuxライクな環境を構築するためのソフトウェア群です。GMPをインストールするためにLinuxライクな環境が必要なので、先にCygwinをインストールしておきます。 メモ:Cygwinのインストールには時間がかかります。休日などに余裕を持って行いましょう。 1.1 Cygwinをインストールする場所を決める 十分な空き容量のあるドライブを

  • 円周率.jp

    定義 円周率について 多角形を用いた求め方 確率を用いた求め方 なぜπを使うのか arctan とは 円周率の値 100万桁まで 連分数 近似値 円周率記憶 記憶桁数の記録 覚え方 円周率計算記録 手計算(正多角形) 手計算(arctan) コンピュータ 個人コンピュータ 円周率を求める公式・アルゴリズム 多角形の利用 arctan系 Ramanujan系 連分数系 AGM系 Borwein系 BBP系 円周率計算プログラム 計算プログラムの紹介 Spigot プログラム 多倍長計算について 加減算 乗算 Karatsuba 法 Toom-Cook 法 FFT Newton 法 Binary splitting法 DRM法 その他 雑記(後でどこかに纏める情報) 参考文献

  • FFTとAGMによる円周率計算プログラム

    [English] 詳細 これは,円周率を巨大な桁数で計算するパッケージです. これを作ったきっかけは,ある研究で作った FFT ベースの多倍長計算 ルーチンのベンチマークを行ったことです. 計算速度は Super_PI ver 1.1 @東大金田研究室 と比較して約 2.5 倍高速です. 多倍長基演算ルーチンは四則演算と平方根です. プログラムの変更で円周率以外の計算(sqrt(2) など)もできると思います. 配布 pi_fftc6_src.tgz (52KB), source file only, for UNIX / ver. LG1.1.2-MP1.5.2af updated: 011105 pi_fftc6.zip (358KB), source file with WIN32 binary / ver. LG1.1.2-MP1.5.2af updated: 011105 p

  • 円周率 10000 桁

    arctan(1/m) を求めることができるプログラムを作り、 バグを取るために arctan(1/5) の計算をして、Windows の電卓で計算した arctan(1/5) の値と比較することにします。 そのため最初は桁数をあまり大きくしません。 #include <stdio.h> #define M 8 // 4*(M-1)=小数点以下の桁数 (10 進表示) #define N 7 // 4*(N-1)=小数点以下の桁数 (16 進表示) // M-1≒1.204(N-1) (M, N の関係) void Add(unsigned a[], unsigned b[]); void Sub(unsigned a[], unsigned b[]); void Div(unsigned a[], unsigned d); void Mul(unsigned a[], unsigned

  • 1